2012-02-17 3 views
6

J'ai une application Mule où j'envoie une requête à plusieurs WebServices et agrège la liste de réponses que je reçois, l'idée est d'obtenir la première réponse de la liste en la renvoyant de le CustomJavaClass où la liste est gérée:Mule ESB: Impossible de copier un message avec une charge utile de flux

return responses.get(0); 

Je suis en mesure d'atteindre le WSDL si je tente de l'atteindre sur un navigateur, le WSDL retourné ressemble à son supposé regarder. Mais j'essaye d'envoyer un message via SoapUI je reçois l'exception suivante:

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 Exception:

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

mes configurations actuelles:

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

Répondre

8

Obtenir fonctionne le WSDL parce que la La requête GET ne comporte aucune charge utile. Mais lorsque vous essayez d'appeler une méthode SOAP, la charge POST est un InputStream, qui bien sûr ne peut pas être réparti plusieurs fois.

Ainsi: sérialiser le flux d'entrée HTTP avec:

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

juste après le http:-point final entrant.

Questions connexes