从 DB table 设置值到输出 HTTP headers

Setting values from DB table to output HTTP headers

我是 mule ESB 的新手。 我需要设置 HTTP headers,其中应从 MySQLDB 获取值。我能够从数据库中获取值。数据库在一行中返回了多个列值。

我可以在流变量 (flowVars) 中设置一列值,并且可以在 HTTP 中设置 headers。但是,如果我必须在每个 HTTP headers 中设置多个列变量,将导致我编写多个设置变量命令。

如何避免编写多个设置变量命令? (是否有任何 mule expression 可以通过单个命令设置多个变量?)还有其他简单的方法可以实现吗?

<flow name="mule_eeFlow">
    <http:listener config-ref="HTTP_Input_eba_Listener_Configuration" path="/XXX/additem" doc:name="HTTP"/>
    <db:select config-ref="MySQL_Configuration" doc:name="Database">
        <db:template-query-ref name="Template_Query"/>
    </db:select>
    <set-variable variableName="LEVEL" value="#[message.payload[0].'X-API-COMPATIBILITY-LEVEL']" doc:name="Variable"/>
    <set-variable variableName="DEVNAME" value="#[message.payload[0].'X-API-DEV-NAME']" doc:name="Variable"/>
    <set-variable variableName="APPNAME" value="#[message.payload[0].'X-API-APP-NAME']" doc:name="Variable"/>
    <set-variable variableName="CERTNAME" value="#[message.payload[0].'X-API-CERT-NAME']" doc:name="Variable"/>
    <set-variable variableName="SITEID" value="#[message.payload[0].'X-API-SITEID']" doc:name="Variable"/>
    <set-variable variableName="CALLNAME" value="#[message.payload[0].'X-API-CALL-NAME']" doc:name="Variable"/>

    <custom-transformer class="AddingHTTPHeader" doc:name="Java"/>
</flow>

我的 Java 代码看起来像

@Override
public Object transformMessage(MuleMessage message, String outputEncoding)
        throws TransformerException {
    // TODO Auto-generated method stub
    message.setOutboundProperty("X-API-COMPATIBILITY-LEVEL", message.getInvocationProperty("LEVEL"));
    message.setOutboundProperty("X-API-DEV-NAME", message.getInvocationProperty("DEVNAME"));
    message.setOutboundProperty("X-API-APP-NAME", message.getInvocationProperty("APPNAME"));
    message.setOutboundProperty("X-API-CERT-NAME", message.getInvocationProperty("CERTNAME"));
    message.setOutboundProperty("X-API-SITEID", message.getInvocationProperty("SITEID"));
    message.setOutboundProperty("X-API-CALL-NAME", message.getInvocationProperty("CALLNAME"));

    return null;
}

您可以直接在 Mule 中设置出站属性,而无需使用变量和 Java 代码,有多种方法可以做到这一点。

使用 'Set Property' 变压器

https://docs.mulesoft.com/mule-fundamentals/v/3.7/message-state#setting-a-property-on-a-message

https://docs.mulesoft.com/mule-user-guide/v/3.7/property-transformer-reference

或者,如果您将 EE 与 DataWeave 一起使用,则可以在 DataWeave 中设置所有 属性 并仅使用一个 DataWeave 转换器创建它们,而不是添加单独的 属性 转换器。

https://docs.mulesoft.com/mule-user-guide/v/3.7/using-dataweave-in-studio#handling-multiple-outputs

感谢您的回答! 这帮助我获得了 "message properties" 功能。这帮助我删除了 java 代码并设置了变量。这个函数帮我设置了多个http headers。

<message-properties-transformer doc:name="Message Properties">
        <add-message-property key="X-API-COMPATIBILITY-LEVEL" value="#[message.payload[0].'X-API-COMPATIBILITY-LEVEL']"/>
        <add-message-property key="X-API-DEV-NAME" value="#[message.payload[0].'X-API-DEV-NAME']"/>
        <add-message-property key="X-API-APP-NAME" value="#[message.payload[0].'X-API-APP-NAME']"/>
        <add-message-property key="X-API-CERT-NAME" value="#[message.payload[0].'X-API-CERT-NAME']"/>
        <add-message-property key="X-API-SITEID" value="#[message.payload[0].'X-API-SITEID']"/>
        <add-message-property key="X-API-CALL-NAME" value="#[message.payload[0].'X-API-CALL-NAME']"/>
    </message-properties-transformer>