Сопоставление URL-адресов API WSO2 ESB 4.7.0

Я пытаюсь создать API на WSO2 ESB 4.7.0 для обработки запросов на службу 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. Этот 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». Что я делаю не так?


person Vinícius Fonseca    schedule 04.11.2013    source источник


Ответы (1)


Решено! Мне пришлось удалить 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 тоже работает! :)

person Vinícius Fonseca    schedule 07.11.2013