Mule Studio - 将set变量传递给Java Transformer

Tom*_* Ax 2 mule mule-studio

我有一个骡子流,其中一部分需要传递两个"有效载荷"对象 - 一个有效载荷是Customer,另一个是Store.

流的当前有效负载设置为Store,并且可以正确地传递到我的Java转换器类中.

我使用Variable(设置变量名称为Customer)来保存我的客户有效负载,并使用我的Java Transformer的属性字段来尝试传递它.

目前它将它作为字符串传递给我的Java类 - 而不是它应该引用的变量.

我在变换器中填写了属性字段:名称:客户价值:#[变量:客户]参考:

任何帮助将非常感激.我正在使用Mule 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>
Run Code Online (Sandbox Code Playgroud)

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*iel 6

我个人认为,当你使用Transformer时,你应该转换你的Payload而不需要额外的数据.尝试使用接收两个参数的方法创建POJO.然后你可以用invoke它来调用它

<invoke object-ref="yourBean" method="yourMethod" methodArguments="#[payload],#[flowVars['Customer']]"/>
Run Code Online (Sandbox Code Playgroud)