2013-03-16 77 views
1

如何在WSO2 ESB故障序列ERROR_CODE中访问来自wso2dss端标准错误的错误文本?如何在WSO2 ESB中按故障顺序访问此消息?

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

这是WSO2DSS标准错误消息:

<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> 

如何访问呢?任何人都知道吗?

+0

我想这//文/文(),但它不工作 – Faisal 2013-03-16 11:50:12

+0

请另见如果u希望更多的澄清这个... HTTP://stackoverflow.com/questions/15402606/how-to- know-error-message-in-wso2dss – Faisal 2013-03-16 12:18:47

+0

你可以试试这种方法吗?它将允许您在WSO2 ESB的故障序列中收到此Soap Fault。 http://maharachchi.blogspot.com/2012/09/now-you-can-send-soapfaults-to-fault.html – 2013-03-16 17:07:58

回答

1

在ESB中,默认情况下不会识别SOAP错误。它只是将它作为基本的SOAP消息传递。 为了将其识别为一个SOAP_FAULT你应该设置该属性

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

病房后,就会引发故障序列传入SOAP_FAULT。 所以你必须声明即将到来的消息是一个SOAP_FAULT,所以你必须说它是一个SOAP_FAULT并强制它出现错误序列。这在[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> 

canbe指向您的任何电子邮件客户端。 给定的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

+0

thanx很多dharshana ..我已经使用上面的属性实际上我使用两个代理人一个会做插入2表中另一个拆分消息,并在表中插入,所以当有任何错误发生在wso2dss我需要执行消息,但我的代理给这样的错误[2013-03- 18 11:59:52,658]错误 - NativeWorkerPool未捕获异常 org.apache.axiom.om.OMException:com.ctc.wstx.exc.WstxParsingException:非法处理指令目标(“xml”); xml(不区分大小写)由规格保留。 at [row,col {unknown-source}]:[1,167] – Faisal 2013-03-18 06:35:09

+0

但是我的dss传递这样的错误[2013-03-18 11:59:52,637] ERROR {org.wso2.carbon.dataservices.core.description。 query.SQLQuery} - 错误:插入或更新表“tactiondetail”违反外键约束“fktactiondetail_taskid” 细节:表(ttask)中不存在键(taskid)=( - 18)。 org.postgresql.util.PSQLException:错误:插入或更新表“tactiondetail”违反外键约束“fktactiondetail_taskid” 细节:表(ttask)中不存在键(taskid)=( - 18)。 其实Esb无法处理这个错误它的givibg直接上面的错误请帮助这个 – Faisal 2013-03-18 06:38:09

+0

我需要把这个FORCE_ERROR_ON_SOAP_FAULT哪里?在InSequence? – zygimantus 2016-05-03 07:36:36

0

请使用下面的代码作为faultSequence。

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