在代理URL wso2 esb中传递动态输入

时间:2016-06-16 15:57:43

标签: proxy wso2 esb

我正在尝试简单地将REST服务作为代理服务托管在WSO2 ESB中。我正在使用自定义代理执行此操作。当我运行创建的代理时,我无法在运行时将参数传递给代理服务。我该怎么做呢? 我的REST服务将使用以下格式的网址:http://ip:host/requestMapping/ {name} 参数'名称'必须通过ESB上托管的代理服务从UI通过ESB传递到服务。你能帮助我完成这项工作的步骤吗? 我尝试使用此页面:http://wso2.com/library/articles/2013/12/restful-integration-with-wso2-esb/ 但这是为了创建我已经成功创建的API。但我无法使用代理服务这样做。 基本上在我的程序中,当用户与UI交互时,他输入一个名称作为输入。此名称必须传递给ESB中托管的代理服务,该服务应将其作为路径变量转发给我的REST服务。 现在,我的服务机构是:

<inSequence>
      <send>
       <endpoint>
       <http method="POST" uri-template="http://ip:port/resourceMapping/{uri.var.name}"></http>

        </endpoint>
       </send>
    </inSequence>
    <outSequence>
      <send></send>
    </outSequence>

2 个答案:

答案 0 :(得分:1)

使用+来控制编码,因为这是URI模板规范的一部分。尝试以下代码。

<inSequence>
<parameter name="uri.var.name" expression="YOUR EXPRESSION" />
  <send>
   <endpoint>
   <http method="POST" uri-template="http://ip:port/resourceMapping/{+uri.var.name}"></http>
    </endpoint>
   </send>
</inSequence>
<outSequence>
  <send></send>
</outSequence>

WSO2ESB HTTP Endpoint throws exception when using uri.var parameters in the uri-template

答案 1 :(得分:0)

您可以使用Header mediator将“To”标题的值更改为所需的concat表达式。

例如,请检查此链接: Defining dynamic endpoint in wso2esb

或者,如果您还没有,也可以在此处查看类似问题的答案:wso2-esb-dynamically-change-endpoint-address 根据这个,你应该提前设置属性“uri.var.name”。即,

<inSequence>
   <parameter name="uri.var.name" expression="" />
   <send>
   <endpoint>
   <http method="POST" uri-template="http://ip:port/resourceMapping/{uri.var.name}"></http>

    </endpoint>
   </send>
</inSequence>
<outSequence>
  <send></send>
</outSequence>

表达式取决于输入格式的方式 - XML,JSON等。您可以在此处阅读有关XPath的更多信息:https://docs.wso2.com/display/ESB490/Synapse+XPath+Variables和此处:http://www.w3schools.com/xsl/xpath_syntax.asp