【问题标题】:Setting values from DB table to output HTTP headers从 DB 表设置值以输出 HTTP 标头
【发布时间】:2015-12-13 09:04:35
【问题描述】:

我是 mule ESB 的新手。 我需要设置应该从 MySQLDB 获取值的 HTTP 标头。我能够从数据库中获取值。 DB 以一行返回多个列值。

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

如何避免编写多个设置变量命令? (是否有任何骡子表达式通过单个命令设置多个变量?)有没有其他简单的方法来实现这一点?

<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 esb mel


    【解决方案1】:

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

    使用“设置属性”转换器

    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

    【讨论】:

      【解决方案2】:

      感谢您的回答! 这帮助我获得了“消息属性”功能。这帮助我删除了 java 代码并设置了变量。这个函数帮助我设置了多个http头。

      <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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 2012-08-06
        • 2017-08-28
        • 1970-01-01
        相关资源
        最近更新 更多