You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅修改XML消息的SOAP信封而保留SOAP体变量?

问题描述

我将如下JSON转换为XML:

{ "firstNumber": 25, "secondNumber": 23 }

转换后的XML结果是:

<Add xmlns="http://tempuri.org/"> <a>25</a> <b>23</b> </Add>

这个XML缺少SOAP信封和消息头,导致目标端点ecs.syr.edu/faculty/fawcett/Handouts/cse775/code/calcWebService/Calc.asmx无法识别。我尝试用Enrich Mediator调整格式,但它会替换整个SOAP体(包括里面的变量)。请问有没有仅修改XML消息的SOAP信封的方法?

解决方案

针对WSO2 EI/APIM场景,你可以通过以下两种方式仅补全SOAP信封结构,同时保留原有SOAP体内容:

方法1:使用PayloadFactory Mediator

PayloadFactory可以直接将现有内容包裹到完整的SOAP信封中,不会替换原有体内容。示例配置如下:

<payloadFactory media-type="xml">
    <format>
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:temp="http://tempuri.org/">
            <soapenv:Header/>
            <soapenv:Body>
                $1
            </soapenv:Body>
        </soapenv:Envelope>
    </format>
    <args>
        <arg evaluator="xml" expression="$body/*"/>
    </args>
</payloadFactory>

该配置会把当前消息体中的<Add>节点直接插入到SOAP信封的<Body>标签内,自动补全标准SOAP信封和头结构。

方法2:正确配置Enrich Mediator

如果坚持使用Enrich Mediator,不要选择替换整个SOAP体,而是通过“添加父节点+注入内容”的方式实现:

  1. 先生成一个空的完整SOAP信封模板
  2. 将原有体内容注入到模板的<Body>节点中
    示例配置:
<!-- 生成空的SOAP信封模板 -->
<enrich>
    <source type="inline" clone="true">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:temp="http://tempuri.org/">
            <soapenv:Header/>
            <soapenv:Body/>
        </soapenv:Envelope>
    </source>
    <target type="envelope"/>
</enrich>
<!-- 将原有体内容注入到新信封的Body中 -->
<enrich>
    <source type="body" clone="true"/>
    <target type="body"/>
</enrich>

第一步会创建一个带空Body的SOAP信封,第二步把原来的<Add>节点插入到这个信封的<Body>里,既保留了原有变量内容,又补全了SOAP信封结构。

内容的提问来源于stack exchange,提问作者Mugisha Solomon Bekunda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:57:18