SoapUI发送带附件的XML请求需区分MTOM(推荐,自动处理)和SWA(手动构造MIME),核心是正确设置Content-Type、边界符、Content-ID及xop:Include或cid引用。

SoapUI 发送带附件的 XML 请求(支持 MTOM 或 SWA)需要手动构造符合规范的消息结构,不能仅靠普通表单上传。核心在于正确设置请求的 Content-Type(如 multipart/related)、添加附件部分、并在 SOAP Body 中用 xop:Include 引用二进制内容。以下是具体操作方式:
确认协议支持并选择合适方式
MTOM 和 SWA 都是 SOAP 附件传输标准,但 SoapUI 原生对 MTOM 支持更完善(尤其 Pro 版),而 SWA(SOAP with Attachments)较老旧,需严格遵循 MIME 封装格式。建议优先使用 MTOM,除非服务端明确要求 SWA。
- MTOM:基于 XOP(XML-binary Optimized Packaging),SOAP Body 内保留 XML 结构,二进制内容单独作为 multipart part 存放,用
cid:引用 - SWA:整个消息为
multipart/related,SOAP XML 本身是第一个 part(type="text/xml"),附件是后续 part(如 type="application/octet-stream"),通过Content-ID关联
用 MTOM 方式发送(推荐)
SoapUI(开源版或 Pro)可自动处理 MTOM,前提是 WSDL 正确声明了 xs:base64Binary 参数并标注 xmime:expectedContentTypes,且请求使用「Raw」模式或启用 MTOM 选项。
- 在请求编辑区右键 → Select Request Style → MTOM/XOP(若灰显,说明 WSDL 未正确定义附件参数)
- 将附件字段(如
)的值设为文件路径,格式为:file://C:/path/to/file.jpg(注意双斜杠和绝对路径) - 确保项目设置中启用了 MTOM:Project → Properties → Enable MTOM 打勾
- 发送前检查 Raw 标签页,可见自动生成的
Content-Type: multipart/related; type="application/xop+xml"及多个 parts
手动构造 SWA 请求(无 WSDL 或需兼容旧服务)
当无法启用 MTOM 或服务只认 SWA 时,需切换到 Raw 模式,手工拼接 MIME 消息。关键点:边界符一致、Content-ID 匹配、SOAP part 的 Content-Type 为 text/xml,附件 part 的 Content-Type 和 Content-ID 要与 XML 中引用一致。
- 将请求类型改为 Raw,Content-Type 设为:
multipart/related; type="text/xml"; start="" - 按 MIME 格式编写(示例含一个 JPG 附件):
--xyz123
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: 8bit
Content-ID:
test.jpg
--xyz123
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
Content-ID:
[二进制数据粘贴处 —— SoapUI 不支持直接粘贴二进制,需用脚本或 Base64 编码后用 text/plain + base64]
--xyz123-- - 实际中更常用 Base64 编码附件再内联(非真正 SWA,但服务端常兼容):把文件 Base64 编码后填入
...,此时 Content-Type 保持text/xml即可
验证与调试技巧
发送后务必检查 Raw 请求和响应,确认 multipart 结构完整、CID 引用匹配、附件大小未被截断。常见失败原因包括边界符缺失、Content-ID 多余空格、文件路径错误或编码不匹配。










