2016-12-02 9 views
0

я получил следующий сценарий:XQuery Обработка ошибок

XQUERY:

declare namespace xs = "http://www.w3.org/2001/XMLSchema"; 


declare variable $udgHeader external; 


let $msg-name := upper-case($udgHeader/msg-name/text()) 
let $recipient := upper-case($udgHeader/recipient/text()) 

return 
<recipients> 
    <recipient> 
     <dest> 
     { 
      if (($msg-name = "ARS_ISTP") and ($recipient = "ISTP")) then 

       'IstpArs' 

      else if (($msg-name = "ARS_ESM") and ($recipient = "ESM")) then 

       'EsmArs' 

      else 


       error(xs:QName('fase'), concat("Unknown msg-name/recipient combination ['", $msg-name,"'/'", $recipient, "']! Please check fase recipient list.")) 

     } 
     </dest> 
    </recipient> 
</recipients> 

Мой входящий XML выбросит ошибку.

Эта ошибка Я хочу сравнить с файлом (ожидаемый результат) с Java (отрицательный тест).

ожидается содержание Результат:

Unknown msg-name/recipient combination ['ARS_XYZ'/'ARS']! Please check fase recipient list. 

Моя проблема в том, что я получаю эту ошибку:

org.apache.xmlbeans.XmlRuntimeException: weblogic.xml.query.exceptions.XQueryUserException: line 29, column 5: fase: Unknown msg-name/recipient combination ['ARS_XYZ'/'ESM']! Please check fase recipient list. 

Как я могу справиться с этой ошибкой, чтобы соответствовать моим ожидаемый результат?

ответ

1

Информация о том, что происходит, когда вы вызываете ошибку(), немного зависит от вашего API-интерфейса процессора, но в среде Java я ожидаю, что ваш вызов процессора запросов завершится с исключением, а не с обычным результатом. Если вы хотите получить обычный результат, верните некоторый элемент (или другой объект), который вы распознаете как результат ошибки, а не вызываете ошибку().

В 3.0/3.1 вы можете достичь этого, вызвав ошибку() при возникновении ошибки, а затем поймав ее, используя try/catch на верхнем уровне запроса.