WSO2 ESB REST API - 动态HTTP端点(使用模板端点)外部化 - 主机名和端口号

时间:2014-02-27 16:32:26

标签: wso2 wso2esb

我想在HTTP端点中外化主机名和端口号,因此我尝试在启动ESB时在JVM参数中传递主机名和端口号。  使用脚本/类中介,我可以从系统属性中获取它并将其放在消息上下文中。然后使用属性中介,我可以访问并记录它的值。  直到这一点,我没有任何问题,但当我尝试使用此值替换HTTP端点时,如下所示;它不起作用。

实际ESB Synapse API配置:


 <api xmlns="http://ws.apache.org/ns/synapse" name="ContentLength" context="/content">
    <resource methods="GET">
       <inSequence>
          <send>
             <endpoint>
               <http method="get" uri-template="http://198.160.1.223:8080/greeting/{uri.var.name}"></http>
             </endpoint>
          </send>
       </inSequence>
       <outSequence>
          <send></send>
       </outSequence>
   </resource>
 </api>

预期的ESB Synapse API配置:


  <api xmlns="http://ws.apache.org/ns/synapse" name="ContentLength" context="/content">
     <resource methods="GET">
        <inSequence>
            <script language="js">mc.setProperty("system.hostname",java.lang.System.getProperty("my.hostname"));mc.setProperty("system.port.no",java.lang.System.getProperty("my.port.no"));</script>
        <log level="custom">
           <property name="system.hostname" expression="get-property('system.hostname')"/>
           <property name="system.port.no" expression="get-property('system.port.no')"/>
        </log>
            <send>
              <endpoint>
                <http method="get" uri-template="http://{system.prop.my.hostname}:{system.prop.my.port.no}/greeting/{uri.var.name}"></http>
              </endpoint>
           </send>
        </inSequence>
        <outSequence>
           <send></send>
        </outSequence>
    </resource>
  </api>

在这种情况下,我有什么办法可以使用模板端点和HTTP端点吗?

让我知道其他选择。

2 个答案:

答案 0 :(得分:1)

<property name="uri.var.host" expression="get-property('system.hostname')"/>
       <property name="uri.var.port" expression="get-property('system.port.no')"/>
    </log>
        <send>
          <endpoint>
            <http method="get" uri-template="http://{uri.var.host}:{uri.var.port}/greeting/{uri.var.name}"></http>
          </endpoint>
       </send>

如上所述进行更改。它会起作用。

答案 1 :(得分:1)

由于您已经要求其他选项,您可以在属性介体上为主机名和端口执行字符串连接,然后直接在uri-template中使用它。

请参阅this link以了解有关http端点的信息。