Mule ESB中的条件映射内容

时间:2016-07-05 13:02:43

标签: mule

我试图设置' 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而不是单独代理它不同的客户)

1 个答案:

答案 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>