WSO2 API 管理器 - 如何将错误/故障消息从 InSequence 发送回客户端

标签 wso2 wso2-api-manager wso2-esb

我使用 WSO2 API 管理器 (StockQuoteService) 创建了一个 REST API,并配置了一个基于后端 SOAP 的 Web 服务(将 REST 转换为 SOAP),它将根据 URL 模板从那里获取数据。

在“In Sequence”中,我使用 Switch 调解器根据传入数据将请求发送到不同的后端端点,而在默认情况下(没有大小写匹配时),我想将错误消息发送回客户端提示“输入消息无效”。

我已经尝试使用发送调解器、响应调解器、序列调解器,但仍然没有成功(可能是做错了什么),因为当我尝试调用不响应的 URL 时,我仍然收到“服务器无响应”错误匹配 Switch 的任何大小写并转到 Default。

如何从 WSO2 API Manager 的 In Sequence 中将错误/故障消息发送回客户端?

最佳答案

在我的场景中,输入序列我使用了开关调解器,我调用了一个操作或另一个,在默认选项中我创建了我的失败响应

  <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

关于WSO2 API 管理器 - 如何将错误/故障消息从 InSequence 发送回客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893392/

相关文章:

java - ESB 服务客户端创建

WSO2 ESB 集群概念

cross-domain - WSO2 API Manager 的跨域问题

ssl - 将 CA 签名证书导入 JKS

wso2 - 在一台服务器中安装 WSO2 ESB 和 Api Manager 服务器

mysql - 将 WSO2API 管理器从 H2 迁移到 Mysql

java - WSO2 API Manager安装无法运行Java

java - 导出 jar 如何无法用其 lib 执行

soap - WSO2-ESB 如何将整个 SOAP 信封保存到属性中

esb - WS02 : error No artifacts found to be deployed in this server. 忽略碳应用