将参数添加到端点url wso2 esb

时间:2013-11-11 12:23:33

标签: wso2 wso2esb

我是WSO2 esb的新手。我想创建一个api,我想在api Url中添加动态参数到端点url。

我的终点网址与http://example.com/api/sync/{session_id}.json

类似

我试图像

那样创建api
<api name="rest" context="/sync">
          <resource methods="GET" uri-template="/{id}">
             <inSequence>
             <log level="full">
                <property xmlns:ns="http://org.apache.synapse/xsd"
                          name="uri.var.session"
                          expression="get-property('uri.var.id')"
                          scope="axis2"/>
                </log>
                <property name="REST_URL_POSTFIX" scope="axis2" action="remove"/>
                <send>
                   <endpoint name="Mecars">
                      <http trace="enable"
                            method="get"
                            uri-template="http://example.com/sync/{+uri.var.session}.json"/>
                   </endpoint>
                </send>
            </inSequence>
          </resource>
       </api>

在log中我得到uri.var.session的值但是在端点Uri-template上它没有附加。

请指导我如何将api uri-template中的{id}值附加到终点uri-template?

4 个答案:

答案 0 :(得分:5)

检查sample 我建议你直接在uri-template上使用属性mediator adn使用字符串连接,而不是添加&#34;变量+ .json&#34;在uri-template。

那是;

<property xmlns:ns="http://org.apache.synapse/xsd"
                          name="uri.var.session"
                          expression="get-property('uri.var.id')"
                          scope="axis2"/>

在上面的表达式中,使用&#34; .json&#34;来构造字符串连接以构造完整变量。结束。

答案 1 :(得分:3)

更改http端点uri模板,如下所示。

<http trace="enable" method="get" uri-template="http://example.com/sync/{uri.var.id}.json"></http>

以下是修改后的api配置。

<api xmlns="http://ws.apache.org/ns/synapse" name="rest" context="/sync">
 <resource methods="GET" uri-template="/{id}">
    <inSequence>
     <log level="full">
        <property xmlns:ns="http://org.apache.synapse/xsd" name="uri.var.session" expression="get-property('uri.var.id')"></property>
     </log>
     <property name="REST_URL_POSTFIX" scope="axis2" action="remove"></property>
     <send>
        <endpoint name="Mecars">
           <http trace="enable" method="get" uri-template="http://example.com/sync/{uri.var.id}.json"></http>
        </endpoint>
     </send>
  </inSequence>
 </resource>
</api>

答案 2 :(得分:3)

请从您的http端点删除'+'符号。它对我来说工作正常

示例API

   <api xmlns="http://ws.apache.org/ns/synapse" name="Elastic Search Using NPI"     context="/api/npi/professional/npi.json">
 <resource methods="OPTIONS GET" uri-template="/{npi}">
    <inSequence>
       <log level="full">
        <property name="uri.var.npi" expression="get-property('uri.var.npi')"></property>
      </log>
     <send>
        <endpoint>
           <http method="get" uri-template="example.com/{uri.var.npi}"></http>
        </endpoint>
     </send>
    </inSequence>     
  </resource>
</api>

答案 3 :(得分:1)

您可以在属性介体中执行字符串连接,如下所示。

<property xmlns:ns="http://org.apache.synapse/xsd"
                      name="uri.var.session"
                      expression="fn:concat(get-property('uri.var.id'),'.json')"
                      scope="axis2"/>