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

Axis 1.4调用SOAP服务时SimpleDeserializer遇到意外子元素错误如何解决

错误根因

该报错是Axis 1.4的内置SimpleDeserializer反序列化逻辑触发的异常:
WSDL中定义的接口返回值为String简单类型,Axis自动生成代码时默认给该返回字段绑定了SimpleDeserializer,该反序列化器仅支持解析纯文本内容,不接受字段包含XML子元素结构。而实际服务端返回的SOAP报文中,对应返回字段嵌套了未转义的XML标签,并非纯文本字符串,因此触发反序列化异常。

解决方案

可根据实际场景选择以下任意一种方案修复:

  • 方案一:修改WSDL定义,将返回值的字段类型从xs:string调整为xs:anyType或xs:element,重新用Axis的wsdl2java工具生成代码。调整后Axis不会使用SimpleDeserializer处理该字段,会将返回的节点解析为org.w3c.dom.Element对象,后续自行从Element对象中提取XML内容转为字符串即可。
  • 方案二:不修改自动生成的代码,手动为返回字段注册自定义反序列化器。自行实现反序列化逻辑,不管接收的节点是否包含子元素,都统一将节点内容转为字符串,再绑定到返回字段上,核心代码示例:
// 替换为你接口返回字段对应的命名空间和字段名
QName returnQName = new QName("http://your.namespace.com", "getProduitsWebServicesXMLReturn");
Call call = service.createCall();
call.registerTypeMapping(String.class, returnQName,
    new org.apache.axis.encoding.ser.XMLStringSerializerFactory(),
    new org.apache.axis.encoding.ser.XMLStringDeserializerFactory());
  • 方案三:如果可协调服务端改造,让服务端对返回的XML字符串做转义处理,将<转义为&lt;、>转义为&gt;,使XML内容变为纯文本字符串放入SOAP响应,原有的SimpleDeserializer即可正常解析。
  • 排查验证方法:开启Axis的请求响应日志打印,先确认完整的SOAP响应报文结构,确认返回字段是否确实包含未转义的XML子标签后再选择对应方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:27:03