2013-05-17 2 views
0

Когда я запускаю мой поток, я получаю следующее сообщение об ошибке `Mule - выбор выпуск компонента

<org.apache.cxf.staxutils.DepthXMLStreamReader> 
    <reader class="org.mule.module.cxf.support.StreamClosingInterceptor$1"> 
    <reader class="com.ctc.wstx.sr.ValidatingStreamReader"> 
     <mXml11>false</mXml11> 
     <mInputBuffer>xmlns:ns2=&quot;http://wsdouane/&quot;&gt;&lt;return&gt;&lt;douanePK&gt;&lt;idConteneurId&gt;ctr1&lt;/idConteneurId&gt;&lt;idCritereId&gt;C11&lt;/idCritereId&gt;&lt;/douanePK&gt;&lt;valeurId&gt;oui&lt;/valeurId&gt;&lt;/return&gt;&lt;/ns2:findResponse&gt;&lt;/S:Body&gt;&lt;/S:Envelope&gt;&#x0;&#x0;................. 

мы можем увидеть правильный ответ мыло, начиная с <mInputBuffer>, есть способ получить только ответ мыла? ?

вот мой поток

<flow name="SOAPWebService" doc:name="SOAPWebService"> 
    <http:inbound-endpoint exchange-pattern="request-response" address="http://localhost:8088/esb" doc:name="HTTP"/> 
    <object-to-string-transformer doc:name="Object to String"/> 
    <choice doc:name="Choice"> 
     <when expression="#[payload.contains('C22')]"> 
      <set-variable variableName="paramCtr" value="#[message.inboundProperties['ctr']]" doc:name="conteneur"/> 
      <set-variable variableName="paramC" value="#[message.inboundProperties['c']]" doc:name="critere"/> 
      <component class="com.example.components.SampleComponent" doc:name="Java"/> 
      <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="C:\MuleStudio\SandBox\resources\PrepareRequestXMLPort.xsl" doc:name="XSLT"> 
       <mulexml:context-property key="paramCtr" value="#[flowVars['paramCtr']]" /> 
       <mulexml:context-property key="paramC" value="#[flowVars['paramC']]" /> 
      </mulexml:xslt-transformer> 
      <cxf:proxy-client payload="body" enableMuleSoapHeaders="true" doc:name="SOAP"/> 
      <http:outbound-endpoint exchange-pattern="request-response" address="http://localhost:8080/ClientsDB/port" doc:name="PortWS"/> 
      <byte-array-to-string-transformer doc:name="Byte Array to String" /> 
     </when> 
     <otherwise> 
      <set-variable variableName="paramCtr" value="#[message.inboundProperties['ctr']]" doc:name="conteneur"/> 
      <set-variable variableName="paramC" value="#[message.inboundProperties['c']]" doc:name="critere"/> 
      <component class="com.example.components.SampleComponent" doc:name="Java"/> 
      <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" xsl-file="C:\MuleStudio\SandBox\resources\PrepareRequestXMLDouane.xsl" doc:name="XSLT"> 
       <mulexml:context-property key="paramCtr" value="#[flowVars['paramCtr']]" /> 
       <mulexml:context-property key="paramC" value="#[flowVars['paramC']]" /> 
      </mulexml:xslt-transformer>     
      <cxf:proxy-client payload="body" enableMuleSoapHeaders="true" doc:name="SOAP"/> 
      <http:outbound-endpoint exchange-pattern="request-response" address="http://localhost:8080/ClientsDB/douane" doc:name="DouaneWS"/> 
      <byte-array-to-string-transformer doc:name="Byte Array to String"/> 
     </otherwise> 
    </choice> 
    <xm:object-to-xml-transformer doc:name="Object to XML"/> 
    <file:outbound-endpoint path="C:\MuleStudio\SandBox\output" outputPattern="#[function:datestamp:dd-MM-yy]_#[function:systime].xml " responseTimeout="10000" doc:name="Outgoing File"/> 
</flow> 

спасибо.

ответ

1

Это выражение #[payload.contains('c22')] не может работать, потому что полезная нагрузка равна InputStream. Разве вы не видите следы стека в журналах Мула?

В любом случае попробуйте добавить <object-to-string-transformer /> до choice и посмотреть, не устраняет проблему.

EDIT:

Проблема заключается в том, что вы используете XStream (в xm:object-to-xml-transformer) сериализовать объект ответа CXF (org.apache.cxf.staxutils.DepthXMLStreamReader) в XML. Ответ CXF не должен быть запутан и должен обрабатываться cxf:proxy-client в фазе ответа потока. xm:object-to-xml-transformer и file:outbound-endpoint после маршрутизатора choice, вероятно, нарушают этот механизм. Попробуйте обернуть их в элементе response выше маршрутизатора choice, который будет выполняться после него в фазе ответа.

Обратите внимание, что я уже дал вам этот совет в другом вопросе https://stackoverflow.com/a/16615537/387927, но вы не отреагировали на него.

Кроме того, я не думаю, что byte-array-to-string-transformer ничего не делает: полезная нагрузка сообщение после http:outbound-endpoint с должно быть org.apache.cxf.staxutils.DepthXMLStreamReader, предотвращая этот трансформатор на огонь.

+0

Я опробовал выбор, и теперь он отлично работает, спасибо. Я также обновил поток в моем вопросе. Теперь у меня есть другой выход, не могли бы вы помочь? спасибо –

+0

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

+0

Ок, извините, теперь я знаю об этом. Спасибо. –

Смежные вопросы