【发布时间】: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;
}
【问题讨论】: