【问题标题】:Mule Studio - pass set variable to Java TransformerMule Studio - 将 set 变量传递给 Java Transformer
【发布时间】:2013-05-09 08:01:59
【问题描述】:

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

【问题讨论】:

  • 你能分享你的xml配置吗?
  • @genjosanzo 是对的:与对您正在做的事情的文字描述相比,使用一点 XML 会更清晰,让我们有更好的机会帮助您。

标签: mule mule-studio


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,这很有效——同时在我的流程中将我创建的类注册为这样的 bean: 这个方法和transformers相比有性能影响吗?
猜你喜欢
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2012-11-19
  • 2017-10-07
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多