WSO2 esb:如何使用数字操作名称代理REST服务

时间:2013-02-28 18:10:11

标签: rest soap wso2 wso2esb

我们正在尝试在WSO2 ESB上实现基本的SOAP-to-REST代理服务。我们的第三方REST服务以下列格式接受请求:

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

问题是操作名称只有数字格式 - 在我们的例子中是“16783484”。 payloadFactory介体不允许具有&lt; 16783484&gt;作为XML元素,因为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 个答案:

答案 0 :(得分:2)

WSO2支持团队建议采用以下解决方案。谢谢Sandapa!

在这种情况下,您必须将端点格式设置为“rest”。如果是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>

答案 1 :(得分:0)

虽然这个评论不会建议你一个解决方案,但我可以说这是一个坏主意:-)你可以尝试使用XSLT而不是PayloadFactory进行转换,但这又可能会扼杀XML解析器。问题是WSO2产品使用的许多开源项目/库,你可能碰到其他地方将遵守规范。从长远来看,当您与其他外部工具/系统集成时,遵守规范将减少您的麻烦。是否可以更改您的休息服务,以便服务名称至少在前面有下划线?