wso2esb如何使用属性介体

时间:2016-02-10 15:32:24

标签: wso2 wso2esb hateoas

我想解析后端服务器发回的Location头,以便在将其发送到客户端之前重写它。我试过这个但是不起作用,我的意思是Location标头是空的。我试过没有模式参数,它运行良好我可以在客户端响应中定义好Location头。

<property expression="get-property('LocationHeaderFromBackEnd')"
            name="Location" pattern="v1.*" scope="transport"/>

属性LocationHeaderFromBackEnd =“http://host:port/v1/resource/uid

有人可以提供一些帮助吗?

非常感谢。

2 个答案:

答案 0 :(得分:0)

我找到的解决方案是使用JavaScript中介来处理正则表达式,如下所示。我希望你能给我一个更好的一个:)

<script language="js"><![CDATA[var str = mc.getProperty("LocationHeaderFromBackEnd");
        var re = /.v1.*/; 

    var m;

    if ((m = re.exec(str)) !== null) {
        if (m.index === re.lastIndex) {
            re.lastIndex++;
        }
        // View your result using the m-variable.
        // eg m[0] etc.
    }
    mc.setProperty("LocationHeaderParsed",  m[0]);]]>
   </script>
   <property expression="get-property('LocationHeaderParsed')" name="Location" scope="transport"/>

答案 1 :(得分:0)

我认为你可以在财产中使用模式。

例如我的属性值是

DecodeUrl = “message_id = dd0f-678a-5678&amp; response = ok”

获取message_id和响应我们可以使用此代码:

 <property xmlns:ns="http://org.apache.synapse/xsd"
           name="message_id"
           expression="get-property('DecodeUrl')"
           pattern="(message\_id\=)(.*)(&amp;)(.*)"
           group="2"/>
 <property xmlns:ns="http://org.apache.synapse/xsd"
           name="response"
           expression="get-property('DecodeUrl')"
           pattern="(message\_id\=)(.*)(&amp;)(response=)(.*)"
           group="5"/>
 <log level="custom">

输出:

dd0f-678a上-5678

确定

组中的索引号非常重要。