mule:直到成功不接受数据编织变换

时间:2016-05-12 11:03:56

标签: mule dataweave

我有一个场景,我需要调用该服务,直到webservice调用的http状态为200。 子流(SearchSubFlow)工作正常,直到它成功直到成功,但当它在内部直到成功时它会在SearchSubFlow中以字节数组到字符串的下面错误。

org.mule.api.transformer.TransformerMessagingException:null(java.lang.NullPointerException)。消息有效负载的类型为:WeaveMessageProcessor $ WeaveOutputHandler。

<flow name="CheckFlow">
    <http:listener config-ref="HTTP_Internal_Listener" path="${CONNECTION_URI}" doc:name="HTTP"/>
    <cxf:proxy-service payload="envelope" doc:name="CXF" namespace="http://abc/RetrieveService" service="RetrieveService" soapVersion="1.2" wsdlLocation="${WSDL_RETRIEVE}"/>
    <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
    <set-variable variableName="Ref" value="#[xpath3('//*:CheckRequest/*:Ref')]" doc:name="Get External Ref Number"/>
    <until-successful objectStore-ref="objectStore" maxRetries="${RESEND_COUNTER}" millisBetweenRetries="${RESEND_INTERVAL}" doc:name="Retry to check policy status" >
        <flow-ref name="SearchSubFlow" doc:name="SearchSubFlow"/>
    </until-successful>

</flow>
<sub-flow name="SearchSubFlow">
    <dw:transform-message doc:name="PolicySearchWS Request">
        <dw:set-payload><![CDATA[%dw 1.0
%output application/xml
%namespace soapenv http://schemas.xmlsoap.org/soap/envelope/

---
{   
    soapenv#Envelope: {
        soapenv#Header: {
            InsureJHeader:{
                role: "${HEADER_ROLE}"
            }
        },
        soapenv#Body: {
            arguments:{
                externalQuoteReference: flowVars.Ref
            }
        }
    }
}]]></dw:set-payload>
    </dw:transform-message>
    <byte-array-to-string-transformer doc:name="Byte Array to String"/>
    <message-properties-transformer scope="invocation" doc:name="Set Service Endpoint">
        <add-message-property key="serviceEndPoint" value="${APP_SYSTEM}/${SELECT_SERVICE_BASE_URL}/${.CREATE.ADDRESS}"/>
    </message-properties-transformer>
    <message-properties-transformer doc:name="Set SOAP Action">
        <add-message-property key="SOAPAction" value="${CREATE.SOAPACTION}"/>
    </message-properties-transformer>
    <cxf:proxy-client payload="envelope" doc:name="Proxy"/>
    <http:request config-ref="HTTP_Select_Request" path="#[serviceEndPoint]" method="POST" doc:name="Call Search WS">
        <http:success-status-code-validator values="200,500"/>
    </http:request>
    <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
    <message-properties-transformer scope="invocation" doc:name="Message Properties">
        <add-message-property key="PolicySearchErrorMessage" value="#[xpath3('//*:Fault/*:ProcessingFault/*:message')]"/>
        <add-message-property key="httpStatus" value="#[message.inboundProperties.'http.status']"/>
    </message-properties-transformer>
   </sub-flow>

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

未引用对象库,如下所示解决了问题

<until-successful  maxRetries=5 doc:name="Retry to check status" >
        <flow-ref name="SearchSubFlow" doc:name="SearchSubFlow"/>
    </until-successful>

答案 1 :(得分:0)

使用<mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>代替<byte-array-to-string-transformer doc:name="Byte Array to String"/>

希望这有帮助。