2013-02-28 3 views
0

Мы пытаемся реализовать базовую прокси-службу SOAP-REST на WSO2 ESB. Наша служба REST третьей стороны принимает запросы в следующем формате:WSO2 esb: как прокси-служба REST с числовым именем операции

http://<MYURL>/simpleQuery/16783484?oslc.select=value1 

Проблема заключается в том, что имя операции имеет числовой только формат - «16783484» в нашем случае. payloadFactory-посредник не позволяет иметь в качестве XML-элемента < 16783484> так как спецификация XML ограничивает имена только числовых имен.

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CQProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <payloadFactory> 
      <format> 
       <16783484> 
        <oslc.select>$1</oslc.select> 
       </16783484> 
      </format> 
      <args> 
       <arg value="myvalue1"/> 
      </args> 
     </payloadFactory> 
     <send> 
      <endpoint> 
       <address uri="http://<MYURL>/simpleQuery" format="get"/> 
      </endpoint> 
     </send> 
     <drop/> 
     </inSequence> 
     <outSequence> 
     <log level="full"/> 
     <send/> 
     </outSequence> 
    </target> 
</proxy> 

Как это можно преодолеть?

Цените свою помощь!

ответ

2

Служба поддержки WSO2 предложила следующее решение. Спасибо, Сандапа!

В этом случае вы должны установить формат конечной точки как «отдых». И если это запрос GET, вы должны установить «HTTP_METHOD» как GET. Пожалуйста, обратитесь к приведенному ниже примеру.

Пример:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CQProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <property name="REST_URL_POSTFIX" value="/getSimpleQuote?symbol=IBM" scope="axis2" type="STRING"/> 
     <property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/> 
     <send> 
      <endpoint> 
       <address uri="http://localhost:9000/services/SimpleStockQuoteService/" format="rest"/> 
      </endpoint> 
     </send> 
     <drop/> 
     </inSequence> 
     <outSequence> 
     <log level="full"/> 
     <send/> 
     </outSequence> 
    </target> 
    <description></description> 
</proxy> 
+0

Интересно, почему это не помечено как правильный ответ. Я попробовал это, и это правильно. –

0

Хотя этот комментарий не собирается предлагать вам решение, я могу сказать, что это плохая идея :-) Вы можете попробовать использовать XSLT вместо PayloadFactory для преобразования, но опять же это может задушить синтаксический анализатор XML. Проблема заключается в большом количестве проектов/библиотек с открытым исходным кодом, которые используются в продуктах WSO2, и вы можете столкнуться с ними в другом месте. В конечном счете, соблюдение спецификации даст вам меньше головных болей при интеграции с другими внешними инструментами/системами. Можно ли изменить сервис отдыха, чтобы имя службы, по крайней мере, имело подчеркивание спереди?

+0

XSLT-посредник будет иметь ту же проблему Chintana. К сожалению, я не могу изменить API REST, поскольку он является частью продукта COTS. Но насколько я знаю, спецификация REST не требует названия операции для соблюдения каких-либо стандартов, правильно? Поддерживает ли WSO2 ESB перенаправление на службу REST путем жесткого кодирования имени операции в URL конечной точки и удаления содержимого сообщения SOAP? Это подход, который использует Mule ESB. –

Смежные вопросы