2013-06-03 87 views
2

部署在ESB上的我的代理服务正在调用另一个独立的REST服务。该服务返回HTTP状态200以及响应主体中的一些数据。我的问题是我如何从响应中检索HTTP状态。下面是我的配置:如何检索WSO2 ESB中REST服务返回的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> 
... 

我尝试下面的代码:

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

而这一个了:

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

但他们都返回null。

回答

5

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

<property xmlns:ns="http://org.apache.synapse/xsd" name="Status" expression="$axis2:HTTP_SC"/> 

这是奇怪的是,文件获取属性(“Axis2的”,“HTTP_SC”)不起作用。

+1

'get-property('axis2','HTTP_SC')'适合我。我正在使用ESB 4.7.0 – Bee

+1

@Bhathiya:你的回答也是正确的,但Alex表现的更好。 –