Mule CXF Marshall Response - PullRequest
       19

Mule CXF Marshall Response

4 голосов
/ 14 июня 2011

Я использую cxf: jaxws-client в Mule 3, и ответ, который я получаю от моего вызова веб-службы, имеет тип ReleasingInputStream.Я попытался добавить http-response-to-message-transformer, но это приводит к ошибке - кто-нибудь знает, как я могу получить ответ как объект в отличие от ReleasingInputStream?

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 08 июня 2012

Чтобы решить эту проблему, поместите <cxf-client> в раздел <outbound-endpoint> (НЕ ДО ЭТОГО), изменив следующий код

    <cxf:jaxws-client
        clientClass="com.xyz.services.WSServices"
            port="WSServicesSoap"
            wsdlLocation="classpath:wsdl-file.wsdl"
            operation="GimmeDataOperation" />
    <outbound-endpoint exchange-pattern="request-response" address="http://localhost:8083/OutboundService" />

, который производит ReleasingInputStream вывод на

    <outbound-endpoint exchange-pattern="request-response" address="http://localhost:8083/OutboundService" >
        <cxf:jaxws-client
            clientClass="com.xyz.services.WSServices"
            port="WSServicesSoap"
            wsdlLocation="classpath:wsdl-file.wsdl"
            operation="GimmeDataOperation" />
    </outbound-endpoint>

, который возвращает ожидаемый объект.

1 голос
/ 25 января 2012

Весь смысл jaxws-client заключается в том, чтобы получить немаршалированный Java-объект, поэтому получение ответа WS в виде String или ReleasingInputStream даже не должно быть вариантом.

Чтобы заставить "работать" так, как ожидалось бы, чтобы WS-клиент работал, - поместите INSIDE в , вы получите правильный объект Java в качестве полезной нагрузки.

1 голос
/ 17 июня 2011

У меня была такая же проблема.Я решил это, добавив преобразователь ObjectToString на сторону отклика исходящей конечной точки следующим образом:

<mule>
   <object-to-string-transformer name="ObjectToString"/>

   <flow>
      ...
      ...
      ...
      <cxf:jaxws-client clientClass="com.my.ClientClass"
                        port="MyPort" 
                        wsdlLocation="classpath:MyWsdl.wsdl"
                        operation="MyOperation" />
      <outbound-endpoint address="http://some.address/path/to/service"
                         exchange-pattern="request-response" 
                         responseTransformer-refs="ObjectToString" />
      ...
      ...
      ...
   </flow>
</mule>
...