我想解析后端服务器发回的Location头,以便在将其发送到客户端之前重写它。我试过这个但是不起作用,我的意思是Location标头是空的。我试过没有模式参数,它运行良好我可以在客户端响应中定义好Location头。
<property expression="get-property('LocationHeaderFromBackEnd')"
name="Location" pattern="v1.*" scope="transport"/>
属性LocationHeaderFromBackEnd =“http://host:port/v1/resource/uid”
有人可以提供一些帮助吗?
非常感谢。
答案 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\=)(.*)(&)(.*)"
group="2"/>
<property xmlns:ns="http://org.apache.synapse/xsd"
name="response"
expression="get-property('DecodeUrl')"
pattern="(message\_id\=)(.*)(&)(response=)(.*)"
group="5"/>
<log level="custom">
输出:
dd0f-678a上-5678
确定
组中的索引号非常重要。