【问题标题】:Adding http path parameters dynamically in wso2 esb在 wso2 esb 中动态添加 http 路径参数
【发布时间】:2013-04-29 07:15:35
【问题描述】:

我们有一个代理服务,它使用 jms 传输来接收消息。收到的消息需要使用 http POST 发送到后端 REST 服务。 以下是对消息进行的

  1. xslt 转换以提取特定字段
  2. 将消息类型设置为 application/json
  3. 发送到端点

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

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

【问题讨论】:

    标签: wso2 esb


    【解决方案1】:

    我相信您正在寻找的是 REST_URL_POSTFIX 属性。如果设置此属性,则该值将附加到其余端点 url。

    在axis2的范围内可以定义如下。

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

    可以在本指南中找到一个示例,Using REST with a Proxy Service

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

    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>
    

    【讨论】:

    • 我试过这个。但它适用于 Http GET。但我调用的 Rest 服务是 Http POST。 REST_URL_POSTFIX 属性似乎不适用于 Http POST。
    • @bhaskar ,我已验证该属性有效。我用一个简单的http代理尝试了这个,但我看不出jms有什么不同。确保您设置的表达式正确。您可以使用 tcpmon 验证它最终调用了哪个端点 url。 WSO2 ESB 默认提供 tcpmon。
    • 我再次尝试使用简单的 http 代理本身。但仍然无法使其工作。这是我正在使用的配置。 id 的值不为空,因为它在日志中打印。
    • 它适用于 HTTP GET 但不适用于 HTTP POST。有什么我遗漏的吗?
    • @surlac 您可以通过修改To 标头来执行此操作。前任。 &lt;header name="To" expression="get-property('endpoint_url')"/&gt;。另一种选择是使用模板端点。你可以在这里找到更多信息 - docs.wso2.org/wiki/display/ESB460/Endpoint+Template
    【解决方案2】:

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

    [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

    谢谢,

    莫汉

    【讨论】:

    • 感谢您的快速回复。为了向端点 url 添加路径参数,假设我为 url 定义了一个属性,并将请求的一部分附加到 url 并使用它。 ESB 会做从 jms 到 http 的协议切换吗?此外,我将无法使用超时、暂停设置来错误处理端点配置。有什么方法可以使用注册表中的地址端点并动态附加一些文本?
    • 并参考这个...docs.wso2.org/wiki/display/ESB451/…我认为 WSO2 ESB 文档可以解决您的问题...谢谢...
    • 我应该更清楚。我知道 WSO2 ESB 可以很好地实现从 jms 到 http 的传输切换,反之亦然。但我的问题是,如果我不在发送调解器中提供端点并且只使用属性值(带有动态端点)来设置“To”标头,那么 ESB 是否能够进行传输切换。正如我从链接1 看到的那样,仅通过设置“To”标头并不能完成传输切换。
    • 此外,使用模板的动态端点也不能解决我的问题,因为从模板创建端点时只有设置值而没有设置表达式。 link。这不是从注册表的端点列表中选择一个。它是关于从注册表动态地将一些文本附加到一个端点。
    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2013-07-05
    相关资源
    最近更新 更多