2015-12-13 28 views
0

我是新來的騾子ESB。 我有一個要求,設置HTTP頭應該從MySQLDB中獲取值的地方。我能夠從數據庫中獲取值。 DB用一行返回多個列值。設置數據庫表中的值以輸出HTTP標頭

我能夠在流變量(flowVars)中設置一個列值,並且可以在HTTP標頭中設置該值。但是,如果我必須在每個HTTP頭中設置多個列變量,將導致我寫入多個設置變量命令。

我該如何避免寫多個變量命令? (是否有任何mule expresion設置單個命令多個變量?)是否有任何其他簡單的方法來實現這一目標?

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

回答

0

可以在騾子直接設置出站的屬性,而無需使用的變量和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

0

感謝您的回答! 這幫助我獲得「消息屬性」功能。這幫助我刪除了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>