如何在WSO2 ESB中按故障顺序访问此消息?

时间:2013-03-16 11:38:21

标签: xpath xquery wso2 wso2esb wso2dss

如何从WSO2 ESB故障序列ERROR_CODE中的wso2dss侧标准错误中访问此错误文本?

我得到了正确但这个ERROR_MESSAGE给了NUll。我怎样才能做到这一点?

这是WSO2DSS标准的ERROR消息:

<soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
   <soapenv:Code>
      <soapenv:Value>soapenv:Receiver</soapenv:Value>
   </soapenv:Code>
   <soapenv:Reason>
      <soapenv:Text xml:lang="en-US" xmlns:xml="http://www.w3.org/XML/1998/namespace">The emp_DataService service, which is not valid, does not belong to the emp_DataService service group.</soapenv:Text>
   </soapenv:Reason>
   <soapenv:Detail/>
</soapenv:Fault>

我想访问错误代码以及错误文本。为什么?因为我需要向后端部门发送邮件,这将有助于他们尽快追踪错误。

如何在WSO2ESB中执行此操作?

我希望这两个节点显示:

  1. <soapenv:Code>
              <soapenv:Value>soapenv:Receiver</soapenv:Value>
           </soapenv:Code>
    
  2.  2。
     &ltsoapenv:Text xml:lang="en-US"
     xmlns:xml="http://www.w3.org/XML/1998/namespace">The emp_DataService
     service, which is not valid, does not belong to the emp_DataService
     service group. &lt/soapenv:Text>
    

    我该如何访问?有人知道吗?

2 个答案:

答案 0 :(得分:1)

在ESB中,默认情况下无法识别SOAP错误。它只是将它作为基本肥皂消息传递。 为了将其标识为SOAP_FAULT,您应该设置属性

<property name="FORCE_ERROR_ON_SOAP_FAULT" value="true">

在病房之后,它将触发传入的SOAP_FAULT的故障序列。 因此,您必须声明即将发送的消息是SOAP_FAULT,因此您可以说它是SOAP_FAULT并强制它为错误序列。这在[1]博客中通过我的Amila进行了解释。

对于问题的第二部分,您可以使用有效负载工厂转换。 您可以使用以下顺序。

<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

[2]。 http://wso2.org/library/knowledge-base/use-mail-transport-esb-convert-soap-message-plain-text-mail

答案 1 :(得分:0)

请使用以下代码作为faultSequence。

<faultSequence>
<log level="custom">
<property name="message" expression="get-property('ERROR_MESSAGE')"/>
</log>
</faultSequence>