如何在WSO2 ESB中检索REST服务返回的HTTP状态?

Ale*_*ich 2 wso2 wso2esb

我在ESB上部署的代理服务正在调用另一个独立的REST服务.此服务返回HTTP状态200以及响应正文中的一些数据.我的问题是如何从响应中检索HTTP状态.这是我的配置:

   <proxy name="CQProxy"
          transports="https http"
          startOnLoad="true"
          trace="disable">
      <description/>
      <target>
         <inSequence>
            <switch source="get-property('Action')">
               <case regex="getTaskTicket">
                  <sequence key="GetTaskTicket"/>
               </case>
               <default/>
            </switch>
         </inSequence>
         <outSequence>
            <log>
               <property xmlns:ns="http://org.apache.synapse/xsd"
                         name="Status"
                         expression="get-property('HTTP_SC')"/>
            </log>
            <send/>
         </outSequence>
         <faultSequence/>
      </target>
      <publishWSDL key="gov:/services/cqproxy/CQProxy.wsdl">
         <resource location="CQProxy.xsd" key="gov:/services/cqproxy/CQProxy.xsd"/>
      </publishWSDL>
   </proxy>
   <sequence name="GetTaskTicket">
...
      <property name="REST_URL_POSTFIX"
                value="/16783484?oslc.select=dcterms:title,oslc_cm:status"
                scope="axis2"
                type="STRING"/>
      <property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/>
      <send>
         <endpoint>
            <address uri="http://.../simpleQuery"
                     format="rest"/>
            <property name="OSLC-Core-Version" value="2.0" scope="transport"/>
            <property name="Accept" value="application/rdf+xml" scope="transport"/>
         </endpoint>
      </send>
   </sequence>
...
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码:

<log>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Status" expression="get-property('HTTP_SC')"/>
</log>
Run Code Online (Sandbox Code Playgroud)

还有这个:

<log>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Status" expression="get-property('axis2', 'HTTP_SC')"/>
</log>
Run Code Online (Sandbox Code Playgroud)

但是他们都返回了null.

Ale*_*ich 5

在详细阅读了WSO2文档后,我找到了正确的答案:

<property xmlns:ns="http://org.apache.synapse/xsd" name="Status" expression="$axis2:HTTP_SC"/>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,记录的get-property('axis2','HTTP_SC')不起作用.

  • `get-property('axis2', 'HTTP_SC')` 对我来说效果很好。我正在使用 ESB 4.7.0 (2认同)
  • @Bhathiya:你的回答也是正确的,但Alex的表现方式更好. (2认同)