2014-03-07 108 views
0

我們在使用代理客戶端將XML發送到Web服務時出現錯誤。下面是配置:mule java.lang.reflect.Method不能轉換爲java.lang.String(java.lang.ClassCastException)

<flow name="CreateDIMEntry" doc:name="CreateDIMEntry"> 
    <vm:outbound-endpoint exchange-pattern="one-way" path="DIM_VM" doc:name="VM"/> 
    <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
    <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="D:\Users\vkamat\Desktop\dim\src\main\resources\addenvelopetopayload.xsl" doc:name="XSLT"/> 
    <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
    <logger message="I am here..#[message.payload]" level="INFO" doc:name="Logger"/> 
    <set-property propertyName="SOAPAction" value="urn:com.org.ProcessActivity" doc:name="Property"/> 

    <set-property propertyName="Content-Type" value="application/soap+xml" doc:name="Property"/> 
    <!-- <set-property propertyName="SOAPAction" value="urn:com.org.ProcessActivity" doc:name="Property"/> --> 
    <cxf:proxy-client doc:name="SOAP" payload="envelope"> 

    </cxf:proxy-client > 

    <http:outbound-endpoint exchange-pattern="request-response" host="${dim.host}" port="${dim.port}" method="POST" doc:name="HTTP" path="${dim.path}"> 
    </http:outbound-endpoint> 
</flow> 

調用如下測試流程此流程時,它工作正常

<flow name="DimFlow1" doc:name="DimFlow1"> 
    <file:inbound-endpoint path="D:\Documents\test" responseTimeout="10000" doc:name="File"/> 
    <flow-ref name="CreateDIMEntry" doc:name="Flow Reference"/> 
</flow> 

但可以集成到另一個流時,它給出了一個錯誤,讓主流的片段從它獲取調用

<async doc:name="Async"> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 
    <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="D:\addenvelopetopayload.xsl" doc:name="XSLT"/> 

    <logger message="before DIM-- #[message.payload]" level="INFO" doc:name="Logger"/> 
    <flow-ref name="CreateDIMEntry" doc:name="Flow Reference"/> 
</async> 

遇到的錯誤是

******************************************************************************** 
Message    : java.lang.reflect.Method cannot be cast to java.lang.String. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of type: ReversibleXMLStreamReader 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. java.lang.reflect.Method cannot be cast to java.lang.String (java.lang.ClassCastException) 
    org.mule.module.cxf.CxfOutboundMessageProcessor:338 (null) 
2. java.lang.reflect.Method cannot be cast to java.lang.String. Failed to route event via endpoint: org.mule.module.cxf.CxfOutboundMessageProcessor. Message payload is of type: ReversibleXMLStreamReader (org.mule.api.transport.DispatchException) 
    org.mule.module.cxf.CxfOutboundMessageProcessor:150 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/DispatchException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
java.lang.ClassCastException: java.lang.reflect.Method cannot be cast to java.lang.String 
    at org.mule.module.cxf.CxfOutboundMessageProcessor.getMethodOrOperationName(CxfOutboundMessageProcessor.java:338) 
    at org.mule.module.cxf.CxfOutboundMessageProcessor.getOperation(CxfOutboundMessageProcessor.java:356) 
    at org.mule.module.cxf.CxfOutboundMessageProcessor.doSendWithClient(CxfOutboundMessageProcessor.java:212) 
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 
******************************************************************************** 
+0

確定有效載荷要'CreateDIMEntry'在兩個呼叫流程相同類型/格式的? – eebbesen

+0

在工作情況下,它是ReceiverFileInputStream,而在非工作情況下它是字節數組。是否因爲有效載荷格式不匹配? –

+0

您可能需要嘗試更多/不同的[轉換](http://www.milesoft.org/documentation/display/current/Using+Transformers)。我認爲這是一個Mule功能測試的完美場景,它可以讓你混淆輸入和輸出以使其工作。此外,[這個問題](http://stackoverflow.com/questions/18297125/mule-method-cannot-be-cast-to-string)可能不是完全相同的問題,但可能會提供一些見解。 – eebbesen

回答

0

嘗試將CXF客戶端之前,以下內容:

<set-variable value="#[flowVars['cxf_operation'].getLocalPart()]" variableName="operation" /> 
+0

我試過你的解決方案,但它給出了沒有這樣的操作的錯誤。爲了更好的觀察,我注意到,流變量cxf_operation包含來自主流的cxf操作(異步塊之前的代碼)的值。簡單去除所有流量變量(cxf_operation,method,cxf_service)解決了這個問題。謝謝你的幫助!! –

相關問題