在 ESB 中,默认情况下不识别 SOAP 错误。它只是将其作为基本的肥皂消息传递。
为了将其识别为 SOAP_FAULT,您应该设置属性
<property name="FORCE_ERROR_ON_SOAP_FAULT" value="true">
之后它将触发传入 SOAP_FAULT 的故障序列。
因此,您必须声明传入的消息是 SOAP_FAULT,因此您必须说它是 SOAP_FAULT 并强制其出现错误序列。我的 Amila 的博客 [1] 对此进行了解释。
对于问题的第二部分,您可以使用有效负载工厂转换。
您可以使用以下顺序。
<sequence xmlns="http://ws.apache.org/ns/synapse" name="ErrorTransformSequence">
<log level="full">
<property name="SEQUENCE" value="----------------DSS FAULT------------------"/>
</log>
<payloadFactory>
<format>
<m:errorMessage xmlns:m="http://dss.error">
<m:error>
<m:message>$1</m:message>
</m:error>
</m:errorMessage>
</format>
<args>
<arg value="/soapenv:Fault/soapenv:Reason/soapenv:Text/text()"/>
</args>
</payloadFactory>
<header name="Action" value="urn:errormsg"/>
<property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
<send>
<endpoint>
<address uri="http://localhost:9765/services/DssService.SOAP11Endpoint/"/>
</endpoint>
</send>
</sequence>
可以指向您的任何电子邮件客户端。
给定的 xpath 直接指向您在问题中发布的 SOAP 响应的错误消息。
要发送电子邮件,您可以使用 [2] 中的 wso2 esb 邮件传输。
[1]. http://maharachchi.blogspot.com/2012/09/now-you-can-send-soapfaults-to-fault.html http://maharachchi.blogspot.com/2012/09/now-you-can-send-soapfaults-to-fault.html.
[2]. http://wso2.org/library/knowledge-base/use-mail-transport-esb-convert-soap-message-plain-text-mail http://wso2.org/library/knowledge-base/use-mail-transport-esb-convert-soap-message-plain-text-mail