我有一个骡子流,其中一部分需要传递两个"有效载荷"对象 - 一个有效载荷是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)
我个人认为,当你使用Transformer时,你应该转换你的Payload而不需要额外的数据.尝试使用接收两个参数的方法创建POJO.然后你可以用invoke它来调用它
<invoke object-ref="yourBean" method="yourMethod" methodArguments="#[payload],#[flowVars['Customer']]"/>
Run Code Online (Sandbox Code Playgroud)