2013-05-09 73 views
2

我有一個流騾子,它的一部分需要傳遞兩個「有效載荷」對象 - 一個有效載荷是Customer,另一個是Store。Mule Studio - 將設置變量傳遞給Java Transformer

流的當前有效負載被設置爲Store,並且正確地傳遞到我的Java變換器類中。

我已經使用變量(設置變量名稱到客戶)來保存我的客戶有效載荷,並使用我的Java Transformer的屬性字段來嘗試並通過它。

目前它將它作爲一個字符串傳遞給我的Java類 - 而不是它應該引用的變量。

我填寫的屬性字段變壓器爲: 名稱:客戶 值:#[變量:客戶] 參考:

任何幫助將非常感激。我使用的騾子Studio版本3.4

代碼摘錄如下

騾子XML

<flow name="query_dos_getStoreStatus" doc:name="query_dos_getStoreStatus"> 
    <choice doc:name="Choice"> 
     <when expression="#[payload.getCustomer()!=null]"> 
      <set-variable variableName="Customer" value="#[payload]" doc:name="Save Customer"/> 
      <custom-transformer class="ServiceDetailsResponseToStores" doc:name="ServiceDetailsResponseStores"/> 
      <custom-transformer class="UpdateIdentifyCustomerResponseForStoreStatus" doc:name="Update Customer for Store status"> 
       <spring:property name="Customer" ref="#[variable:Customer]"/> 
      </custom-transformer> 
      <remove-variable variableName="GetCustomerDetailsResponse" doc:name="Remove Customer variable"/> 
     </when> 
    </choice> 
</flow> 

Java類

import org.mule.transformer.AbstractTransformer; 
import org.mule.transformer.types.DataTypeFactory; 

public class UpdateIdentifyCustomerResponseForStoreStatus extends 
    AbstractTransformer{ 

    public UpdateIdentifyCustomerResponseForStoreStatus() 
    { 
     super(); 

     this.registerSourceType(DataTypeFactory.create(Store.class)); 
     this.setReturnDataType(DataTypeFactory.create(IdentifyCustomerResponseEnvelope.class)); 
    } 

    protected Object _customer; 
    public Object getCustomer() 
    { 
     return this._customer; 
    } 
    public void setCustomer(Object _customer) 
    { 
     this._customer = _customer; 
    } 

    public Object doTransform(Object payload, String outputEncoding) 
    { 
     if(payload instanceof Store && _customer instanceof IdentifyCustomerResponseEnvelope) 
     { 
       Store store = (Store)payload; 
       IdentifyCustomerResponseEnvelope customer = (IdentifyCustomerResponseEnvelope)_customer; 

       //changes to customer 

       return customer; 
     } 

     return this._customer; 
    } 
} 
+1

你能分享你的xml配置嗎? – genjosanzo 2013-05-09 12:16:27

+0

@genjosanzo是對的:一個小小的XML會更清晰,給我們一個更好的機會來幫助你,而不是對你正在做什麼進行文字描述。 – 2013-05-09 16:38:06

回答

6

我個人認爲,當你使用一個變壓器,你應該改變你的有效載荷不需要額外的數據。 嘗試使用接收兩個參數的方法創建POJO。然後你可以使用invoke來稱呼它

<invoke object-ref="yourBean" method="yourMethod" methodArguments="#[payload],#[flowVars['Customer']]"/> 
+1

非常感謝,這工作 - 與我在我的流程中註冊我創建爲一個bean的類一樣: 與變壓器相比,此方法是否具有性能影響? – 2013-05-13 08:34:02