【问题标题】:Mule and java.lang.reflect.Method cannot be cast to java.lang.String in flow-refMule 和 java.lang.reflect.Method 不能在 flow-ref 中强制转换为 java.lang.String
【发布时间】:2014-01-29 19:06:49
【问题描述】:

我有一个调用soap服务的子流程(req:String, response:String)

<sub-flow name="vinculaValidaServiceClienteFlow" doc:name="vinculaValidaServiceClienteFlow">
    <cxf:jaxws-client operation="vinculaServicioIngreso" serviceClass="...VinculaValidaService"  doc:name="SOAP"/>
    <http:outbound-endpoint exchange-pattern="request-response" method="POST" address="http://localhost:8070/pic/vinculaValidaService" doc:name="HTTP"/>
</sub-flow>

我有一个从测试流调用的简单服务。 MuleClient 可以很好地调用此服务:

<flow name="vinculacionFlow2" doc:name="vinculacionFlow2">
    <vm:inbound-endpoint exchange-pattern="request-response" path="test2" doc:name="VM"/>
    <logger level="INFO" doc:name="Logger"/>
    <flow-ref name="vinculaValidaServiceClienteFlow" doc:name="Flow Reference"/>
</flow>

当我在主流程中包含 flow-ref 时,虽然单元测试成功,但无法调用。

<flow name="vinculaServiceFlow" doc:name="vinculaServiceFlow">
    <http:inbound-endpoint exchange-pattern="request-response"   doc:name="vinculaServiceHTTP" ref="vinculaServiceHTTPEndpoint"/>
    <logger level="INFO" doc:name="Logger" message="luna es #[payload]"/>
    <cxf:jaxws-service doc:name="vinculaServiceSOAP" serviceClass="...service.VinculaService"/>
    <byte-array-to-string-transformer doc:name="Byte Array to String"/>
    <logger message="marte es #[payload]" level="INFO" doc:name="printpayload"/>
    <set-variable variableName="cedula" value="#[message.payload]" doc:name="Variable"/>
    <logger message="jupiter es #[flowVars['cedula']]" level="INFO" doc:name="printVar"/>
    <set-payload value="#[message.payloadAs(java.lang.String)]" doc:name="Set Payload"/>
    <logger message="sol es #[payload]" level="INFO" doc:name="printpayload"/>
    <flow-ref name="vinculaValidaServiceClienteFlow" doc:name="Flow Reference"/>
    <scripting:transformer doc:name="Groovy">
        <scripting:script engine="Groovy"><![CDATA[import   ec.gob.presidencia.tecnologia.pic.vincula.service.VinculaResponse def responseVincula = new VinculaResponse("54545366644","12063139", "se puede vincular") return responseVincula ]]>   
        </scripting:script>
    </scripting:transformer>
    <catch-exception-strategy doc:name="Catch Exception Strategy">
        <set-payload value="Error durante el procesamiento del servicio de vinculacion" doc:name="Set mensejae error"/>
    </catch-exception-strategy>
 </flow>

产生的异常是:

异常堆栈是:

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: String (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)

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to service.VinculaResponse
    at ec.gob.presidencia.tecnologia.pic.vincula.service.jaxws_asm.VinculaServicioIngresoResponse_WrapperTypeHelper1.createWrapperObject(Unknown Source)
    at org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage(WrapperClassOutInterceptor.java:100)
    ... 97 more

这个异常不能理解,因为payload在调用服务之前变成了一个字符串(flow-ref)。能否给我一个想法来确定这一点在哪里更正?

谢谢。

【问题讨论】:

    标签: mule mule-studio


    【解决方案1】:

    可以复制吗? Mule method cannot be cast to string

    如果您的目的是将入站 SOAP 调用映射到出站 SOAP 调用,您可能还需要考虑使用代理:http://www.mulesoft.org/documentation/display/current/Proxying+Web+Services+with+CXF

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2018-02-10
      • 2015-05-18
      • 2011-10-27
      • 2019-10-19
      相关资源
      最近更新 更多