2

我在 mule 中有一个流程,其中一部分需要传递两个“有效负载”对象——一个有效负载是客户,另一个是商店。

流的当前有效负载设置为 Store,并且可以正常工作并传递给我的 Java 转换器类。

我使用变量(将变量名称设置为客户)来保存我的客户有效负载,并使用我的 Java 转换器的属性字段来尝试传递它。

目前它正在将它作为字符串传递给我的 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>

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

1 回答 1

6

我个人认为,当您使用 Transformer 时,您应该在不需要额外数据的情况下转换您的有效负载。尝试使用接收两个参数的方法创建 POJO。然后你可以用invoke它来调用它

<invoke object-ref="yourBean" method="yourMethod" methodArguments="#[payload],#[flowVars['Customer']]"/>
于 2013-05-10T17:22:00.343 回答