2013-05-09 2 views
2

나는 뮬 (mule)에 플로우가 있으며, 그 중 일부에는 2 개의 "페이로드"오브젝트가 전달되어야합니다. 하나의 페이로드는 고객이고 다른 하나는 스토어입니다.Mule Studio - 변수 세트를 Java Transformer로 전달합니다.

흐름의 현재 페이로드가 저장소로 설정되고 올바르게 작동하여 Java 변환기 클래스로 전달됩니다.

변수 (고객에게 변수 이름 설정)를 사용하여 고객의 페이로드를 저장하고 Java Transformer의 속성 필드를 사용하여이를 전달했습니다.

현재 자바 클래스를 참조하는 변수가 아닌 문자열로 전달합니다. 이름 :

나뿐만 변압기의 속성 필드를 기입 한 고객에게 값 : #을 [변수 : 고객] 참조 : 어떤 도움이 많이 주시면 감사하겠습니다

. 나는

뮬 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> 

자바 클래스 아래 뮬 Studio 버전 3.4

코드 발췌를 사용하고 개인적으로 난 당신이 변압기를 사용할 때 당신이 당신의 페이로드를 변환해야한다고 생각

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

전화를 invoke를 사용할 수 있습니까? – genjosanzo

+0

@genjosanzo가 맞습니다. XML을 사용하면 자신이하는 일에 대한 텍스트 설명보다 훨씬 더 명확하고 도움이 될 것입니다. –

답변

6

여분의 데이터가 필요 없습니다. 두 개의 인수를받는 메소드로 POJO를 작성하십시오. 그럼 당신은 당신이 당신의 XML 설정을 공유 할 수 그것을

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

많은 도움을 주신 데 대해 감사 드리며, 다음과 같이 작업을 진행합니다. 이 방법은 트랜스포머와 비교하여 성능에 영향을 줍니까? –