来自 属性 的 WSO2 ESB 负载

WSO2 ESB payload from property

我正在尝试从 属性 内容创建有效载荷:

<payloadFactory media-type="xml">
    <format></format>
    <args>
        <arg evaluator="xml" expression="get-property('Response')"/>
    </args>
</payloadFactory>

WSO2 ESB 不接受此作为有效负载格式。我该怎么做才能实现这一目标?

您不能为此使用 Payload Factory。它需要像这样的包装 XML 标签。

<payloadFactory media-type="xml">
    <format><Root></Root></format>
    <args>
        <arg evaluator="xml" expression="get-property('Response')"/>
    </args>
</payloadFactory>

但是你可以用 Enrich mediator 做你想做的事。

<enrich>
   <source clone="false" type="property" property="ORIGINAL_PAYLOAD"/>
   <target action="replace" type="body"/>
</enrich>

Here 是一个相似的样本。

可能是因为 'Response' 克洛维斯的类型。 我正在用这个,没发现问题。

<property description="requestBk" expression="json-eval($.)" name="requestBk" scope="default" type="STRING"/>

<payloadFactory media-type="json">
    <format></format>
    <args>
        <arg evaluator="xml" expression="$ctx:requestBk"/>
    </args>
</payloadFactory>

另一个提示。使用 $ctx: 而不是 get-property 方法以获得更好的性能。因为 get-property 也在 registry 中查找。

是的!正如 Bhathiya 和 Maria 建议的那样,您也可以使用 Enrich mediator,如下所述。 使用 Enrich mediator.

将原始负载复制到 属性
<enrich>
  <source clone="false" type="body"/>
  <target action="replace" type="property" property="ORGINAL_PAYLOAD"/>
</enrich>

然后,每当您需要原始负载时,您就可以使用 Enrich mediator 将消息正文替换为此 属性 值,如下所示:

<enrich>
  <source clone="false" type="property" property="ORIGINAL_PAYLOAD"/>
  <target action="replace" type="body"/>
</enrich>