WSO2 ESB 4.7.0 API url-mapping

时间:2013-11-04 18:53:36

标签: api rest resources wso2 wso2esb

我正在尝试在WSO2 ESB 4.7.0上创建一个API来处理RESTful服务的请求。似乎URL映射功能不起作用或者像过滤器一样工作,选择要发送到端点的内容以及要删除的内容。我已经按照本教程:http://wso2.com/library/articles/2012/09/get-cup-coffee-wso2-way/。这是我的API配置:

<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. 此网址有效:http://esb/rest
  2. 此网址无效:http://esb/rest/numbers
  3. 此网址有效:http://myserver/REST/allnumbers
  4. 在情况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”。我做错了什么?

1 个答案:

答案 0 :(得分: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也有效! :)