2016-08-10 6 views
2

У меня есть простой поток, в котором я называю внешний веб-сервис через HTTP:Как читать тело ответа HTTP в стратегии исключения поймать

<flow name="RFQStatusChangeFlow"> 
    <jms:inbound-endpoint queue="${RFQStatusQueue}" connector-ref="Web_logic_JMS" doc:name="JMS"> 
     <jms:transaction action="ALWAYS_BEGIN"/> 
    </jms:inbound-endpoint> 
    <set-variable variableName="originalMessage" value="#[payload]" doc:name="Variable"/> 
    <set-variable variableName="rfqnum" value="#[xpath3('/m:PublishRFQSTRUCT/m:RFQSTRUCTSet/m:RFQSTD/m:RFQNUM')]" doc:name="Variable"/> 
    <expression-filter expression="#[xpath3('/m:PublishRFQSTRUCT/m:RFQSTRUCTSet/m:RFQSTD[(m:STATUS/@changed=1 and m:STATUS=(\'SENT\')) or (m:EOIREISSUE/@changed=1 and m:EOIREISSUE=1)]')!=empty]" doc:name="Expression"/> 
    <mulexml:xslt-transformer maxIdleTransformers="2" maxActiveTransformers="5" doc:name="XSLT" xsl-file="rfq.xslt"/> 
    <http:request config-ref="HTTP_Request_Configuration" path="${uploadTenderPath}" method="POST" doc:name="HTTP"> 
     <http:request-builder> 
      <http:query-param paramName="Content-Type" value="text/xml; charset=utf-8"/> 
      <http:header headerName="SOAPAction" value="${uploadTenderSOAPAction}"/> 
     </http:request-builder> 
    </http:request> 
    <choice-exception-strategy doc:name="Choice Exception Strategy"> 
     <catch-exception-strategy doc:name="RFQ Catch Exception Strategy" when="#[message.inboundProperties['http.status']==500]"> 
      <logger level="ERROR" message="#[message.inboundProperties]" doc:name="Logger"/>  
      <set-payload value="#[['rfqnum':#[flowVars['rfqnum']], 'message':#[flowVars['originalMessage']], 'exceptions':#[exception]]]" doc:name="Set Payload"/> 
      <jms:outbound-endpoint queue="${rfq.dead.letter}" connector-ref="Web_logic_JMS" doc:name="JMS"> 
       <jms:transaction action="ALWAYS_JOIN" /> 
      </jms:outbound-endpoint> 
     </catch-exception-strategy> 
     <rollback-exception-strategy doc:name="Rollback Exception Strategy"/> 
    </choice-exception-strategy> 
</flow> 

То, что я хочу, чтобы прочитать тело ответа HTTP в улове исключить стратегию и установить ее как часть полезной нагрузки, прежде чем отправлять сообщение в очередь мертвых букв.
Любые идеи, как достичь этого?
Thanks

ответ

0

Ответ по умолчанию передается блоку исключений исключения. Просто создайте java-трансформатор, расширяющий AbstractMessageTransformer и помещаемый в начало обработки исключений.

<catch-exception-strategy doc:name="Catch Exception Strategy"> 
     <custom-transformer class="com.class.YourTransformer" doc:name="Java"/> 
    </catch-exception-strategy> 

В трансформаторе просто сделать что-то вроде этого:

 String response = message.getPayloadAsString(); 

Затем смешать его с первоначальным запросом. Предпочтительно вы должны сохранить первоначальный запрос в переменной, а затем

@Override 
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { 

//Webservice response 
String response = message.getPayloadAsString(); 

//Initial request  
message.getInvocationProperty("initialRequest"); 

//mix them both as you like 
+0

О, я не видел ваш код. Вы можете просто просто KBaluc

+0

Я проверил его сейчас, отлично работал, спасибо –

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