WSO2 ESB:在“按顺序”中设置的标头在“按顺序”中丢失

时间:2018-12-05 16:00:44

标签: wso2 wso2esb

我在WSO2中的消息中介方面遇到了很大的问题。这是东西。

在这种情况下,我在邮件中设置了一个传输头,其中包含messageID,方法是:

<property name="MediationMessageId" scope="transport" expression="get-property('MessageID')"/>

现在,我想按顺序访问此属性。但是,当我尝试在我的payloadFactory中访问它时,我所得到的只是一个空字符串:

<payloadFactory media-type="json">
    <format>{"mediationmessageid": "$1"}</format>
    <args>
        <arg evaluator="xml" expression="$ctx:MediationMessageId"/>
    </args>
</payloadFactory>

结果:

{"mediationmessageid": ""}

我做错什么了吗?

非常感谢

编辑:输入顺序和输出顺序在2个单独的文件中。不知道这是否会产生影响。

3 个答案:

答案 0 :(得分:1)

使用呼叫或发送介体呼叫后端服务后,传输头将消失。后端在响应上设置它自己的传输(响应)标头。

如果您希望您的值在呼叫/发送中介之后仍然可用,则需要在例如Synapse(默认范围)上进行设置。这对于整个交易都是存在的。您可以将“默认”指定为作用域,也可以完全不指定,它将被设置为Synapse。

如果还需要将该属性与消息一起作为传输头发送(这是传输范围所要做的),则必须将其设置两次。一次在默认范围内,一次作为传输头。例如:

<property name="X-MediationMessageId" scope="transport" expression="get-property('MessageID')"/>
<property name="MediationMessageId" scope="default" expression="get-property('MessageID')"/>

要检索然后使用:

<payloadFactory media-type="json">
    <format>{"mediationmessageid": "$1"}</format>
    <args>
        <arg evaluator="xml" expression="$ctx:MediationMessageId"/>
    </args>
</payloadFactory> 

有关范围检查的更多信息,wso2 documentation

答案 1 :(得分:1)

好多汗水和眼泪之后,我终于击败了怪物。

以下是按顺序工作的配置:

<property expression="get-property('MessageID')" name="MediationMessageId" scope="default" type="STRING"/>

还有一个用于out序列:

<payloadFactory media-type="json">
    <format>{"MediationMessageId": "$1"}</format>
    <args>
        <arg evaluator="xml" expression="get-property('default', 'MediationMessageId')"/>
    </args>
</payloadFactory>

这只是对属性范围的混淆...

感谢所有阅读并对此问题有想法的人。

答案 2 :(得分:0)

您的属性在正常范围内,而不是在传输范围(消息标头等所在的位置)内,因此您应该像这样访问它: $ctx:MediationMessageId

还有一个错字,您尝试使用所有小写字母时用CamelCase定义了属性:)