2013-11-04 107 views
1

我想在WSO2 ESB 4.7.0上創建一個API來處理RESTful服務的請求。看起來URL映射功能不起作用,或者像過濾器一樣工作,選擇發送到端點的內容以及要刪除的內容。我遵循本教程:http://wso2.com/library/articles/2012/09/get-cup-coffee-wso2-way/。這裏是我的API配置:WSO2 ESB 4.7.0 API url-mapping

<api xmlns="http://ws.apache.org/ns/synapse" name="rest" context="/rest"> 
    <resource methods="GET" url-mapping="/"> 
     <inSequence> 
     <send> 
      <endpoint> 
       <http method="get" uri-template="http://myserver/REST"/> 
      </endpoint> 
     </send> 
     </inSequence> 
    </resource> 
    <resource methods="GET" url-mapping="/numbers"> 
     <inSequence> 
     <send> 
      <endpoint> 
       <http method="get" uri-template="http://myserver/REST/allnumbers"/> 
      </endpoint> 
     </send> 
     </inSequence> 
    </resource> 
</api> 

有三種情況:

  1. 該URL的工作原理:http://esb/rest
  2. 此URL不起作用:http://esb/rest/numbers
  3. 該URL的工作原理:http://myserver/REST/allnumbers

在情況2中,我收到了一個Apache Tomcat錯誤:

HTTP Status 404 - Not Found 

type Status report 

message Not Found 

description The requested resource (Not Found) is not available. 
Apache Tomcat/6.0.32 

但是,如果我嘗試端點地址,它的工作原理。我認爲URL-Mapping會將「/ numbers」的請求路由到「/ allnumbers」。我究竟做錯了什麼?

回答

4

解決!我不得不發送到終點之前移除REST_URL_POSTFIX:

<api xmlns="http://ws.apache.org/ns/synapse" name="rest" context="/rest"> 
<resource methods="GET" url-mapping="/"> 
    <inSequence> 
    <send> 
     <endpoint> 
      <http method="get" uri-template="http://myserver/REST"/> 
     </endpoint> 
    </send> 
    </inSequence> 
</resource> 
<resource methods="GET" url-mapping="/numbers"> 
    <inSequence> 
    <property name="REST_URL_POSTFIX" scope="axis2" action="remove"/> 
    <send> 
     <endpoint> 
      <http method="get" uri-template="http://myserver/REST/allnumbers"/> 
     </endpoint> 
    </send> 
    </inSequence> 
</resource> 
</api> 

現在,http://esb/rest/numbers的作品呢! :)