2013-04-29 112 views
2

我们有一个使用jms传输接收消息的代理服务。收到的消息需要使用http POST发送到后端REST服务。 上的消息完成在wso2中动态添加http路径参数esb

  1. XSLT转换,以提取特定字段
  2. 设置的消息类型为application/JSON
  3. 发送到端点

其余服务端点需要具有以下使用作为来自jms的输入消息的一部分的值之一动态附加的路径参数。该网址看起来像 http://<server-ip>/service/<client>。这里“客户端”的值是作为消息的一部分。

我们如何使用wso2 esb动态添加路径参数?

回答

2

我相信你在找什么是REST_URL_POSTFIX财产。如果您设置了此属性,则该值将被附加到其余端点url。

它可以用axis2的范围定义如下。在此

<property name="REST_URL_POSTFIX" 
          expression="//client" 
          scope="axis2" 
         type="STRING"/> 

的例子可以在本指南中找到,Using REST with a Proxy Service

编辑:以下是使用curl的POST请求使用简单代理的示例。根据评论提供。在这里,我正在调用WSO2 Application Server中的jaxrs_basic rest服务。

curl -H "Content-Type: application/xml" -H "Accept: application/json" -d "<Customer><name>KasunG</name></Customer>" http://localhost:8281/services/new1/ 

curl -H "Content-Type: application/json" -H "Accept: application/json" -d "{ 'Customer' : { 'name' : 'KasunG' } } " http://localhost:8281/services/new1/ 

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="new1" 
     transports="https http" 
     startOnLoad="true" 
     trace="disable"> 
    <description/> 
    <target> 
     <inSequence> 
     <property name="REST_URL_POSTFIX" 
        value="customers" 
        scope="axis2" 
        type="STRING"/> 
     <property name="ContentType" value="text/xml" scope="axis2" type="STRING"/> 
     <switch source="$axis2:HTTP_METHOD"> 
      <case regex="GET"> 
       <property name="HTTP_METHOD" value="GET" scope="axis2" type="STRING"/> 
      </case> 
      <case regex="POST"> 
       <property name="messageType" value="application/json" scope="axis2"/> 
       <property name="ContentType" 
         value="application/JSON" 
         scope="axis2" 
         type="STRING"/> 
       <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/> 
      </case> 
      <default/> 
     </switch> 
     <send> 
      <endpoint> 
       <address uri="http://localhost:8888/jaxrs_basic/services/customers/customerservice" 
         format="rest"/> 
      </endpoint> 
     </send> 
     </inSequence> 
     <outSequence> 
     <property name="messageType" value="application/json" scope="axis2"/> 
     <send/> 
     </outSequence> 
    </target> 
</proxy> 
+0

我试过了。但它与Http GET很好。但是我打电话的Rest服务是Http POST。 REST_URL_POSTFIX属性似乎不适用于Http POST。 – bhaskar 2013-04-29 12:05:39

+0

@bhaskar,我已经证实,上述属性起作用。我用一个简单的http代理尝试了这一点,但我不明白它对jms的不同。确保你设置的表达正确。您可以使用tcpmon来验证它最终调用哪个端点url。 WSO2 ESB默认运行tcpmon。 – 2013-04-29 12:32:41

+0

我再次尝试了一个简单的http代理本身。但仍然无法使其工作。这是我正在使用的配置。 bhaskar 2013-04-29 15:54:48

2

我认为链接[1] & [2]将帮助您设置jms与WSO2代理...要动态添加路径参数到url使用链接[3],它是用于XML配置文件。类似于此可以在消息的一部分分配给一个属性添加它添加到网址...

[1] http://docs.wso2.org/wiki/display/ESB460/Publish-Subscribe+%28Pub-Sub%29+with+JMS

[2] http://wso2.org/library/articles/2011/11/wso2-esb-example-two-wayrequestresponse-semantic-jms

[3] How to dynamically route message in WSO2 ESB based on XML configuration file

谢谢,

磨憨

+0

感谢您的快速响应。为了给端点url添加一个路径参数,可以说我为url定义了一个属性,并将请求的一部分附加到url并使用它。 ESB是否将协议从jms切换到http?另外,我将无法使用超时,暂停设置来错误地处理端点配置。任何从注册表中使用地址端点的方法,并动态地向它附加一些文本? – bhaskar 2013-04-29 09:55:16

+0

见下面的链接.. [1] http://docs.wso2.org/wiki/display/ESB460/Sample+253%3A+Bridging+from+JMS+to+HTTP+and+Replying+with+a+202 +接受+回复[2] http://docs.wso2.org/wiki/pages/viewpage.action?pageId = 16846499 – Mohanadarshan 2013-04-29 10:50:00

+0

并提及这也... http://docs.wso2.org/wiki/display/ESB451/Sample+10%3A+Introduction+to+Dynamic+Endpoints+with+the+Registry I事WSO2 ESB文档有你的问题的答案...谢谢... – Mohanadarshan 2013-04-29 10:55:58