2017-01-27 8 views
3

Я создал REST API с помощью WSO2 API Manager (StockQuoteService) и настроил веб-службу на основе SOAP на основе ОС (преобразование REST в SOAP), откуда он будет получать данные на основе шаблона URL.WSO2 API-менеджер - Как отправить сообщение об ошибке/ошибке обратно клиенту из InSequence

В «In Sequence» я использовал посредник Switch для отправки запроса на разные конечные конечные точки на основе входящих данных, тогда как в сценарии по умолчанию (когда нет совпадений в случае), я хочу отправить сообщение об ошибке обратно для клиента, что «входное сообщение недействительно».

Я попытался использовать посредник отправки, посредник ответа, посредник по последовательности, но все равно не удастся (может быть, что-то не так), так как по-прежнему я получаю ошибку «без ответа от сервера», когда пытаюсь вызвать URL-адрес, t соответствует любому случаю Switch и переходит в значение по умолчанию.

Как отправить сообщение об ошибке/ошибке клиенту из раздела «Последовательность диспетчера API WSO2»?

ответ

0

Это должно сработать.

<payloadFactory media-type="json"> 
     <format> 
      { 
      "error":"true", 
      "message":"error case" 
      } 
     </format> 
</payloadFactory> 
<property name="messageType" value="application/json" scope="axis2"/> 
<respond/> 
+0

Спасибо большое за ответ. На самом деле я пробовал это, но он не указывает нигде, что он должен вызывать последовательность сбоев, поэтому после запуска все еще пытается вызвать URL-адрес бэкэнд (веб-службу на основе SOAP). Возможно ли это как-то, что в случае по умолчанию мы настраиваем сообщение об ошибке или вызываем последовательность сбоев, которая запрещает ему ссылаться на внутренний адрес и просто отображать настроенное сообщение об ошибке для пользователя. – nits

2

В моем случае последовательность ввода я использовал переключатель медиатор и я призываю операцию или другие, в опции по умолчанию я создаю мой ответ отказа

<inSequence> 
    <switch xmlns:xsd="http://pharmacy.arce.org/xsd" 
      description="" 
      source="//xsd:desc"> 
     <case regex="NATURAL"> 
      <log description="Search Pharmacy" level="custom" separator=","> 
       <property name="STATUS" value="Search Pharmacy"/> 
      </log> 
      <payloadFactory media-type="xml"> 
       <format> 
       <p:searchpharmacy xmlns:p="http://pharmacy.arce.org"> 
        <ax22:pharmacy xmlns:ax22="http://pharmacy.arce.org"> 
         <xs:desc xmlns:xs="http://pharmacy.arce.org/xsd">$1</xs:desc> 
         <xs:id xmlns:xs="http://pharmacy.arce.org/xsd">$2</xs:id> 
         <xs:latitude xmlns:xs="http://pharmacy.arce.org/xsd">$3</xs:latitude> 
         <xs:longitude xmlns:xs="http://pharmacy.arce.org/xsd">$4</xs:longitude> 
        </ax22:pharmacy> 
       </p:searchpharmacy> 
       </format> 
       <args> 
       <arg evaluator="xml" expression="//xsd:desc"/> 
       <arg evaluator="xml" expression="//xsd:id"/> 
       <arg evaluator="xml" expression="//xsd:latitude"/> 
       <arg evaluator="xml" expression="//xsd:longitude"/> 
       </args> 
      </payloadFactory> 
      <header name="To" scope="default" value="urn:searchpharmacy"/> 
      <log level="full" separator=","> 
       <property name="Mensaje" value="Cuerpo"/> 
      </log> 
     </case> 
     <case regex="EXPERIMENTAL"> 
      <log description="Search Pharmacy Direction" level="custom" separator=","> 
       <property name="STATUS" value="Search Pharmacy Direction Request"/> 
      </log> 
      <payloadFactory media-type="xml"> 
       <format> 
       <p:searchPhone xmlns:p="http://pharmacy.arce.org"> 
        <ax22:pharmacy xmlns:ax22="http://pharmacy.arce.org"> 
         <xs:desc xmlns:xs="http://pharmacy.arce.org/xsd">$1</xs:desc> 
         <xs:id xmlns:xs="http://pharmacy.arce.org/xsd">$2</xs:id> 
         <xs:latitude xmlns:xs="http://pharmacy.arce.org/xsd">$3</xs:latitude> 
         <xs:longitude xmlns:xs="http://pharmacy.arce.org/xsd">$4</xs:longitude> 
        </ax22:pharmacy> 
       </p:searchPhone> 
       </format> 
       <args> 
       <arg evaluator="xml" expression="//xsd:desc"/> 
       <arg evaluator="xml" expression="//xsd:id"/> 
       <arg evaluator="xml" expression="//xsd:latitude"/> 
       <arg evaluator="xml" expression="//xsd:longitude"/> 
       </args> 
      </payloadFactory> 
      <header name="Action" scope="default" value="urn:searchPhone"/> 
      <property name="SOAPAction" scope="transport" type="STRING" value=""/> 
      <log level="full" separator=","> 
       <property name="Data" value="Body"/> 
      </log> 
     </case> 
     <default> 
      <log description="Fault" level="custom" separator=","> 
       <property name="STATUS" value="Invoke fault "/> 
      </log> 
      <payloadFactory media-type="xml"> 
       <format> 
       <rs:fault xmlns:rs="http://pharmacy.arce.org"> 
        <rs:code>-1</rs:code> 
        <rs:type>Invocation error</rs:type> 
        <rs:message>No operation has been invoked</rs:message> 
        <rs:description>The value of the input parameter is not valid</rs:description> 
       </rs:fault> 
       </format> 
       <args/> 
      </payloadFactory> 
      <respond/> 
     </default> 
    </switch> 
    </inSequence> 

Вот раздел по умолчанию

<default> 
    <log description="Fault" level="custom" separator=","> 
     <property name="STATUS" value="Invoke fault "/> 
    </log> 
    <payloadFactory media-type="xml"> 
     <format> 
     <rs:fault xmlns:rs="http://pharmacy.arce.org"> 
      <rs:code>-1</rs:code> 
      <rs:type>Invocation error</rs:type> 
      <rs:message>No operation has been invoked</rs:message> 
      <rs:description>The value of the input parameter is not valid</rs:description> 
     </rs:fault> 
     </format> 
     <args/> 
    </payloadFactory> 
    <respond/> 
</default> 

И ответ вина

{"fault":{"code":-1,"type":"Invocation error","message":"No operation has been invoked","description":"The value of the input parameter is not valid"}} 

Вы можете найти другие сценарии здесь

http://harshcreationz.blogspot.com/2016/02/common-and-error-handling-sequences.html

+0

Привет, Альбер, спасибо за ответ. Фактически, когда я настраиваю это, как вы указали в разделе по умолчанию коммутатора, он все равно пытается вызвать URL-адрес бэкэнд.WIth WSO2 ESB работает, как и ожидалось, но с WSO2 API Manager он по-прежнему пытается использовать бэкэнд-код и всегда дает сообщение «Нет ответа от ошибки». – nits

0

Nits реакцию на ошибку в комментариях «нет ответа от сервера», я получаю, когда я называю апи из тестовой консоли, которая имеет диспетчер API.

Вы можете увидеть эту ссылку API Console Issue

Для проверки реакции вы ожидаете.

Попробуйте позвонить из другого инструмента, такого как SOAP UI или Postman, в моем случае я получаю сообщение с ответом о неисправности со структурой, определенной.

Это вызов из консоли API

curl -X GET --header 'Accept: application/xml' --header 'Authorization: Bearer 465f1385-a120-3c19-ad22-c3057e744a3b' 'https://169.254.193.10:8252/getById/1.0.0/getEmployeeXML?Id=5' 

Для вызова от другого клиента в заголовке передать эти значения вы имеете в вызове апи

Accept: application/json 
Authorization: Bearer 465f1385-a120-3c19-ad22-c3057e744a3b'