2013-05-14 103 views
1

在Mule中,我有以下流程: 有一個選擇流量控制來測試輸入並驗證輸入的字符串是否等於'ctr1'。Mule ESB選擇流量控制路由

<flow name="mediationFlow1" doc:name="mediationFlow1"> 
     <file:inbound-endpoint path="C:\MuleStudio\SandBox\input" pollingFrequency="3000" responseTimeout="10000" doc:name="File"/> 
     <file:file-to-string-transformer doc:name="File to String"/> 
     <choice doc:name="Choice"> 
      <when expression="payload=='ctr1'"> 
       <cxf:jaxws-client operation="find" serviceClass="services.port.PortWS" port="portWSPort" enableMuleSoapHeaders="true" doc:name="Port"/> 
       <http:outbound-endpoint exchange-pattern="request-response" method="POST" address="http://localhost:8080/Actors/portWS" doc:name="portWS"/> 
      </when> 
      <otherwise > 
       <cxf:jaxws-client operation="find" serviceClass="services.douane.DouaneWS" port="douaneWSPort" enableMuleSoapHeaders="true" doc:name="Douane"/> 
       <http:outbound-endpoint exchange-pattern="request-response" method="POST" address="http://localhost:8080/Actors/douaneWS" doc:name="douaneWS"/> 
      </otherwise> 
     </choice> 
     <file:outbound-endpoint path="C:\MuleStudio\SandBox\output" outputPattern="#[function:datestamp:dd-MM-yy]_#[function:systime].xml " responseTimeout="10000" doc:name="Outgoing File"/> 
    </flow> 
</mule> 

兩個Web服務調用完美的作品時,我speratly運行它們,但是當我添加選擇ccontrol這是我得到:

INFO 2013-05-14 15:48:07,892 [[mediation].connector.file.mule.default.receiver.01] org.mule.transport.file.FileMessageReceiver: Lock obtained on file: C:\MuleStudio\SandBox\input\input.txt 
INFO 2013-05-14 15:48:08,206 [[mediation].mediationFlow1.stage1.02] org.mule.transport.service.DefaultTransportServiceDescriptor: Loading default outbound transformer: org.mule.transport.http.transformers.ObjectToHttpClientMethodRequest 
INFO 2013-05-14 15:48:08,216 [[mediation].mediationFlow1.stage1.02] org.mule.transport.service.DefaultTransportServiceDescriptor: Loading default response transformer: org.mule.transport.http.transformers.MuleMessageToHttpResponse 
INFO 2013-05-14 15:48:08,253 [[mediation].mediationFlow1.stage1.02] org.mule.transport.service.DefaultTransportServiceDescriptor: Loading default outbound transformer: org.mule.transport.http.transformers.ObjectToHttpClientMethodRequest 
INFO 2013-05-14 15:48:08,254 [[mediation].mediationFlow1.stage1.02] org.mule.lifecycle.AbstractLifecycleManager: Initialising: 'connector.http.mule.default.dispatcher.7073225'. Object is: HttpClientMessageDispatcher 
INFO 2013-05-14 15:48:08,260 [[mediation].mediationFlow1.stage1.02] org.mule.lifecycle.AbstractLifecycleManager: Starting: 'connector.http.mule.default.dispatcher.7073225'. Object is: HttpClientMessageDispatcher 
INFO 2013-05-14 15:48:09,035 [[mediation].connector.file.mule.default.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager: Initialising: 'connector.file.mule.default.dispatcher.23051110'. Object is: FileMessageDispatcher 
INFO 2013-05-14 15:48:09,035 [[mediation].connector.file.mule.default.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager: Starting: 'connector.file.mule.default.dispatcher.23051110'. Object is: FileMessageDispatcher 
INFO 2013-05-14 15:48:09,040 [[mediation].connector.file.mule.default.dispatcher.01] org.mule.transport.file.FileConnector: Writing file to: C:\MuleStudio\SandBox\output\14-05-13_1368539289037.xml 
INFO 2013-05-14 15:48:09,043 [[mediation].connector.file.mule.default.dispatcher.01] org.mule.module.xml.transformer.jaxb.JAXBContextResolver: No common Object of type 'class javax.xml.bind.JAXBContext' configured, creating a local one for: SimpleDataType{type=services.port.Port, mimeType='text/xml'}, SimpleDataType{type=java.io.InputStream, mimeType='*/*'} 
ERROR 2013-05-14 15:48:09,058 [[mediation].connector.file.mule.default.dispatcher.01] org.mule.exception.DefaultMessagingExceptionStrategy: 
******************************************************************************** 
Message    : An invalid return type "class java.io.InputStream" was specified for transformer "JAXBMarshallerTransformer" 
Code     : MULE_ERROR-266 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. An invalid return type "class java.io.InputStream" was specified for transformer "JAXBMarshallerTransformer" (org.mule.api.transformer.TransformerException) 
    org.mule.module.xml.transformer.jaxb.JAXBMarshallerTransformer:122 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
org.mule.api.transformer.TransformerException: An invalid return type "class java.io.InputStream" was specified for transformer "JAXBMarshallerTransformer" 
    at org.mule.module.xml.transformer.jaxb.JAXBMarshallerTransformer.doTransform(JAXBMarshallerTransformer.java:122) 
    at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:411) 
    at org.mule.DefaultMuleMessage.getPayload(DefaultMuleMessage.java:362) 
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 
******************************************************************************** 

我不知道這是否是從正在添加選擇測試表達式? 雖然我無法找到關於如何使用選擇控制流的詳細信息。

感謝您的幫助。 謝謝。

回答

1

Mule默認應用流量中的大量變換器來將有效載荷轉換爲所需格式。

在沒有選擇路由器的情況下,它會將返回的對象轉換爲xml字符串以寫入文件。 但是在選擇路由器時,程序員有責任提供一個轉換器將響應對象轉換爲XML字符串。

將以下mule-xml jaxb對象添加到xml轉換器後選擇路由器,並在寫入文件出站之前。

..... 
    </otherwise> 
</choice> 

<xm:jaxb-object-to-xml-transformer name="ObjectToXML" jaxbContext-ref="MyJaxb" returnClass="java.lang.String" encoding="UTF-8"/> 

希望這會有所幫助。

+0

謝謝你,它的工作完美。 – 2013-05-14 15:22:45

+0

不客氣。快樂學習。 :) – user1760178 2013-05-14 15:23:25