我试图设置' set-cookie'有条件地在http:listener
中的标头 - 仅当它由代理HTTP Soap服务的http:request
设置时。
AFAIK Mule支持三元运算符,以及简化的映射decalration语法,例如[[ key: value ]]
因此,如果未设置set-cookie
,我会尝试返回空地图,如果设置正确,则会使用set-cookie
更正地图
<http:listener path="/*" doc:name="HTTP"
config-ref="HTTP_Listener_Configuration" >
<http:response-builder>
<http:headers expression="#[message.inboundProperties.['set-cookie'] == empty ? [[]] : [['set-cookie': message.inboundProperties.['set-cookie']] ]"/>
</http:response-builder>
</http:listener>
我得到的错误回复是
[Error: unterminated string literal]
[Near : {... cookie' : message.inboundProperties.['set-cookie'] == empty ] ....}]
^
[Line: 1, Column: 58]
at org.mule.el.mvel.MVELExpressionLanguage.validate(MVELExpressionLanguage.java:268) ~[mule-core-3.8.0.jar:3.8.0]
我想要实现的是代理&#39; set-cookie&#39;从流中的http请求下来。有没有其他选择(我目前仍然坚持服务器版本3.7不支持&#39; enableCookies&#39; - enableCookies
并不总是有效,因为它创建全局cookie而不是单独代理它不同的客户)
答案 0 :(得分:0)
好的,我找到了一种解决方法,可以将Mule中的cookie代理回客户端 这不是一般解决方案,但如果适用于空/单一地图
<configuration>
<expression-language>
<import class="java.util.Collections" />
</expression-language>
</configuration>
侦听器(将Set-cookie
传递给客户端)在流
<http:listener path="/*" doc:name="HTTP"
config-ref="HTTP_Listener_Configuration">
<http:response-builder>
<http:headers
expression="#[message.inboundProperties.'set-cookie' == empty? Collections.emptyMap() : Collections.singletonMap('set-cookie', message.inboundProperties.'set-cookie') ]" />
</http:response-builder>
</http:listener>
在我的请求中(从客户端传递cookie)
method="#[message.inboundProperties.'http.method']" doc:name="HTTP"
config-ref="HTTP_Request_Configuration">
<http:request-builder>
<http:header headerName="Cookie"
value="#[message.inboundProperties.'cookie']" />
</http:request-builder>
</http:request>