SoapUI是常用的WebService接口测试工具,支持多种附件传输方式,其中MTOM和SWA是发送带附件XML请求时最常用的两种规范,二者都基于MIME多部分消息实现附件的封装传输,但格式和配置逻辑存在一定差异。

MTOM和SWA的基本概念
MTOM即消息传输优化机制,是W3C标准的附件传输规范,通过将二进制附件编码为Base64格式嵌入MIME消息的单独部分,避免XML中直接嵌入大体积Base64数据导致的解析性能问题。SWA即带附件的SOAP消息,是更早的附件传输规范,附件作为MIME的单独部分与SOAP消息主体并列,SOAP消息中通过cid引用附件内容。
SoapUI中发送MTOM附件请求的步骤
1. 创建或导入接口项目
首先打开SoapUI,新建SOAP项目,输入WSDL地址完成接口导入,找到需要发送带附件请求的对应接口方法。
2. 配置请求启用MTOM
双击打开该方法的请求编辑器,在请求编辑器的顶部工具栏中找到MTOM选项,勾选该复选框即可启用MTOM传输模式。
3. 添加附件并编写XML请求体
切换到请求编辑器的Attachments标签页,点击添加按钮选择本地需要上传的附件文件,设置附件的ContentID和ContentType。然后在请求体的XML中,需要引用附件的节点使用xop:Include元素,示例如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xop="http://www.w3.org/2004/08/xop/include">
<soapenv:Header/>
<soapenv:Body>
<uploadFileRequest>
<fileName>test.jpg</fileName>
<fileContent>
<xop:Include href="cid:attachment_1"/>
</fileContent>
</uploadFileRequest>
</soapenv:Body>
</soapenv:Envelope>
其中cid:attachment_1需要和Attachments标签页中设置的ContentID保持一致。
4. 发送请求验证结果
点击发送按钮,SoapUI会自动将附件按照MTOM规范封装到MIME消息中,查看响应结果确认接口是否正确处理了附件内容。
SoapUI中发送SWA附件请求的步骤
1. 关闭MTOM选项
SWA不需要启用MTOM选项,在请求编辑器的工具栏中确保MTOM复选框处于未勾选状态。
2. 添加附件并编写引用逻辑
同样在Attachments标签页添加附件,设置好ContentID。SWA的SOAP请求体中不需要使用xop:Include元素,而是通过cid直接引用,示例如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<uploadFileRequest>
<fileName>test.jpg</fileName>
<fileRef>cid:attachment_1</fileRef>
</uploadFileRequest>
</soapenv:Body>
</soapenv:Envelope>
3. 发送请求验证
发送请求后,SoapUI会将SOAP消息和附件作为MIME的两个部分封装,服务端通过解析MIME消息获取附件内容。
两种方式的差异对比
| 对比项 | MTOM | SWA |
|---|---|---|
| 规范标准 | W3C标准 | 早期非标准规范 |
| XML引用方式 | 使用<xop:Include>元素 | 直接使用cid引用 |
| 配置要求 | 需要勾选MTOM选项 | 不需要勾选MTOM选项 |
| 兼容性 | 新版本接口支持更好 | 旧系统使用较多 |
常见问题排查
- 如果服务端返回无法解析附件的错误,首先检查
cid引用和Attachments中的ContentID是否完全一致,注意大小写敏感。 - 附件上传后内容损坏,检查附件的ContentType是否设置正确,比如图片文件设置为
image/jpeg,文本文件设置为text/plain。 - MTOM请求发送后服务端未识别到附件,确认请求编辑器顶部的MTOM选项是否已正确勾选,未勾选时即使写了
xop:Include也不会按MTOM格式封装。
注意:部分旧版本SoapUI可能存在MTOM封装的兼容性问题,如果出现异常可以尝试升级到最新稳定版本再测试。