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

Axis 1.4启用MTOM后文件下载失败,报SAXException序列化错误

Axis 1.4客户端MTOM文件下载反序列化失败问题

我正在开发基于Axis 1.4的Web服务项目,通过Eclipse生成客户端存根和类。文件上传功能正常,但文件下载时遇到问题——服务端通过MTOM返回文件,请求和响应格式看起来都正确,却抛出如下错误:

Axis Fault string: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.

我已经设置了以下属性,但没有效果:

getStub()._setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT,Call.ATTACHMENT_ENCAPSULATION_FORMAT_MTOM);

请求报文

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <getFile xmlns="endpoint">
            <input>
                <userName>USERNAME</userName>
                <passWord>PASSWORD</passWord>
                <fileName>FILENAME</fileName>
            </input>
        </getFile>
    </soapenv:Body>
</soapenv:Envelope>

响应报文

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <getResponse xmlns:a="http://www.w3.org/2005/05/xmlmime" xmlns="endpoint">
            <output>
                <fileData>
                    <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:FILEREFERENCENUMBER@apache.org"/>
                </fileData>
            </output>
        </getResponse>
    </soapenv:Body>
</soapenv:Envelope>
解决方案建议
  • 检查WSDL的二进制字段定义:确保WSDL中fileData字段添加了xmime:expectedContentTypes注解,Axis 1.4依赖此注解识别MTOM格式的二进制数据,示例:

    <xsd:element name="fileData" type="xsd:base64Binary">
        <xsd:annotation>
            <xsd:appinfo>
                <xmime:expectedContentTypes>application/octet-stream</xmime:expectedContentTypes>
            </xsd:appinfo>
        </xsd:annotation>
    </xsd:element>
    

    缺少该注解时,客户端会把<xop:Include>当作普通XML元素处理,触发反序列化错误。

  • 重新生成客户端存根:修改WSDL后,务必用Eclipse重新生成客户端代码,确保存根类正确绑定MTOM相关逻辑。

  • 完善客户端MTOM配置:除设置ATTACHMENT_ENCAPSULATION_FORMAT外,添加附件处理器配置:

    Stub stub = getStub();
    stub._setProperty(Call.ATTACHMENT_ENCAPSULATION_FORMAT, Call.ATTACHMENT_ENCAPSULATION_FORMAT_MTOM);
    stub._setProperty(MessageContext.ATTACHMENT_HANDLER, new org.apache.axis.attachments.AttachmentHandlerImpl());
    
  • 验证服务端响应头部:确认服务端返回的Content-Type为multipart/related; type="application/xop+xml",Axis客户端需要正确识别该头部才能解析MTOM附件。

内容的提问来源于stack exchange,提问作者user19556413

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:42:46