2012-02-17 7 views
6

Tengo una aplicación Mule donde envío una solicitud a múltiples servicios web y agrego la lista de respuestas que recibo, la idea es obtener la primera respuesta de la lista devolviéndola la CustomJavaClass donde se manipula la lista:Mula ESB: no se puede copiar el mensaje con una carga útil de transmisión

return responses.get(0); 

soy capaz de alcanzar el WSDL si trato de llegar a ella a través de un navegador, el WSDL regresado parece que su supone que mirar. Pero yo intento enviar un mensaje por soapUI me sale la siguiente excepción:

Exception stack is: 
1. Cannot copy message with a stream payload. Payload type is "org.apache.commons.httpclient.ContentLengthInputStream". Message payload is of type: ContentLengthInputStream (org.mule.api.MessagingException) 
    org.mule.routing.outbound.AbstractSequenceRouter:73 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
org.mule.api.MessagingException: Cannot copy message with a stream payload. Payload type is "org.apache.commons.httpclient.ContentLengthInputStream". Message payload is of type: ContentLengthInputStream 
    at org.mule.routing.outbound.AbstractSequenceRouter.route(AbstractSequenceRouter.java:73) 
    at org.mule.routing.outbound.AbstractOutboundRouter$1.doInTransaction(AbstractOutboundRouter.java:102) 
    at org.mule.routing.outbound.AbstractOutboundRouter$1.doInTransaction(AbstractOutboundRouter.java:99) 
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 

soapUI Excepción:

Failed to route event via endpoint: org.mule.api.p[email protected]ceb6dd. Message payload is of type: ContentLengthInputStream 

mis configuraciones actuales:

<?xml version="1.0" encoding="UTF-8"?> 

<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns:tcp="http://www.mulesoft.org/schema/mule/tcp" xmlns:jms="http://www.mulesoft.org/schema/mule/jms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="CE-3.2.1" xsi:schemaLocation=" 
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd 
http://www.mulesoft.org/schema/mule/tcp http://www.mulesoft.org/schema/mule/tcp/current/mule-tcp.xsd 
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd "> 
    <flow name="flows1Flow1" doc:name="flows1Flow1"> 
     <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:4433/miniwebservice" encoding="UTF-8" mimeType="text/xml" doc:name="HTTP"/> 
     <logger level="INFO" category="ddo" doc:name="Logger"/> 
     <all doc:name="All"> 
      <processor-chain> 
       <message-properties-transformer encoding="UTF-8" mimeType="text/xml" doc:name="Message Properties"> 
        <add-message-property key="http.method" value="#[header:INBOUND:http.method]"/> 
       </message-properties-transformer> 
       <http:outbound-endpoint exchange-pattern="request-response" address="http://localhost:4435/miniwebservice#[header:INBOUND:http.request]" encoding="UTF-8" mimeType="text/xml" doc:name="HTTP"/> 
       <mulexml:xslt-transformer mimeType="text/xml" maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="C:\Users\kiesa\Desktop\XSLReplace.xsl" doc:name="XSLT"/> 
      </processor-chain> 
      <processor-chain> 
       <message-properties-transformer encoding="UTF-8" mimeType="text/xml" doc:name="Message Properties"> 
        <add-message-property key="http.method" value="#[header:INBOUND:http.method]"/> 
       </message-properties-transformer> 
       <http:outbound-endpoint exchange-pattern="request-response" address="http://localhost:4434/miniwebservice#[header:INBOUND:http.request]" encoding="UTF-8" mimeType="text/xml" doc:name="HTTP"/> 
       <mulexml:xslt-transformer mimeType="text/xml" maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="C:\Users\kiesa\Desktop\XSLReplace2.xsl" doc:name="XSLT"/> 
      </processor-chain> 
     </all> 
     <mulexml:xml-to-object-transformer doc:name="XML to Object"/> 
     <component class="CustomJavaClass" doc:name="Java"/> 
     <byte-array-to-string-transformer ignoreBadInput="true" encoding="UTF-8" mimeType="text/xml" doc:name="Byte Array to String"/> 
    </flow> 
</mule> 

Respuesta

8

Conseguir el WSDL funciona porque el La solicitud GET no lleva carga. Pero cuando intenta invocar un método SOAP, la carga útil POST es un InputStream, que por supuesto no se puede despachar varias veces.

Así: serializar el flujo de entrada HTTP con un:

<object-to-byte-array-transformer /> 

justo después de la http: entrante-punto final.

Cuestiones relacionadas