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
相关产品推荐
相关产品推荐

