Как я могу получить доступ к этому сообщению в последовательности ошибок в WSO2 ESB?

Как я могу получить доступ к этому тексту ошибки, который является стандартной ошибкой стороны wso2dss в последовательности ошибок WSO2 ESB ERROR_CODE?

Я получаю правильно, но это 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>

Как я могу получить к этому доступ? Кто-нибудь знает это?


person Faisal    schedule 16.03.2013    source источник
comment
я пробовал это //Text/text(), но он не работает   -  person Faisal    schedule 16.03.2013
comment
см. это также, если вы хотите получить дополнительные разъяснения... сообщение об ошибке в wso2dss"> stackoverflow.com/questions/15402606/   -  person Faisal    schedule 16.03.2013
comment
Можете ли вы попробовать этот метод. Это позволит вам получить эту ошибку Soap в последовательности ошибок WSO2 ESB. maharachchi.blogspot.com/2012/ 09/   -  person Amila Maharachchi    schedule 16.03.2013


Ответы (2)


В ESB по умолчанию ошибка SOAP не распознается. Он просто передает его как основное мыльное сообщение. Чтобы идентифицировать его как SOAP_FAULT, вы должны установить свойство

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

После этого он вызовет последовательность ошибок для входящего SOAP_FAULT. Таким образом, вы должны объявить, что поступающее сообщение является SOAP_FAULT, поэтому вы должны сказать, что это SOAP_FAULT, и принудительно привести его к последовательности ошибок. Это объясняется в [1] блоге за моей Амилой.

Для второй части вопроса вы можете использовать преобразование Payload Factory. Вы можете использовать следующую последовательность.

<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, которое вы разместили в своем вопросе.

А для отправки электронной почты вы можете использовать почтовый транспорт wso2 esb в [2].

[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

person Dharshana    schedule 17.03.2013
comment
Большое спасибо, дхаршана. это [2013-03-18 11:59:52,658] ОШИБКА - Неперехваченное исключение NativeWorkerPool org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxParsingException: недопустимая цель инструкции по обработке (xml); xml (без учета регистра) зарезервирован спецификациями. в [строка, столбец {неизвестный источник}]: [1,167] - person Faisal; 18.03.2013
comment
но моя ошибка передачи dss подобна этой [2013-03-18 11:59:52,637] ОШИБКА {org.wso2.carbon.dataservices.core.description.query.SQLQuery} - ОШИБКА: вставка или обновление таблицы tactiondetail нарушает ограничение внешнего ключа fktactiondetail_taskid Сведения: Ключ (taskid)=(-18) отсутствует в таблице ttask. org.postgresql.util.PSQLException: ОШИБКА: вставка или обновление таблицы tactiondetail нарушает ограничение внешнего ключа fktactiondetail_taskid Detail: ключ (taskid)=(-18) отсутствует в таблице ttask. На самом деле Esb не может обработать эту ошибку, она указана прямо над ошибкой, пожалуйста, помогите с этим. - person Faisal; 18.03.2013
comment
Куда мне нужно поместить эту FORCE_ERROR_ON_SOAP_FAULT? в InSequence? - person zygimantus; 03.05.2016

Используйте следующий код в качестве файла faultSequence.

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