Java SAXParseException:XML文档结构必须在同一实体中开始和结束
我正在从ApacheAxis1.4Java客户端调用一个web服务。调用正确到达服务器,但客户端在大约几分钟后引发此异常:Java SAXParseException:XML文档结构必须在同一实体中开始和结束,java,web-services,axis,Java,Web Services,Axis,我正在从ApacheAxis1.4Java客户端调用一个web服务。调用正确到达服务器,但客户端在大约几分钟后引发此异常: AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: org.xml.sax.SAXParseException: XML document structures must start and end wi
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.
faultActor:
faultNode:
faultDetail:
例外情况并不总是一样的。有时,它会在响应中指定一个特定元素:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: The element type "name" must be terminated by the matching end-tag "</name>".
faultActor:
faultNode:
faultDetail:
我正在进行的web服务调用返回大量数据。如果我将服务器配置为返回较少的数据,则调用将成功完成
注意:虽然我没有收到任何客户端超时异常,但我尝试将超时值增加到5分钟,但没有效果。Apache Axis 1.4默认支持HTTP 1.0。被调用的服务器使用HTTP 1.1,它显然支持分块传输编码 发件人: 分块编码修改消息体,以便将其作为一系列分块传输,每个分块都有自己的大小指示符,后跟一个包含实体头字段的可选尾部。这允许动态生成的内容与收件人验证其已收到完整邮件所需的信息一起传输 这意味着Axis1.4对HTTP响应中的块一无所知,并且可能在接收所有块之前关闭连接。当它尝试反序列化SOAP消息时,它会抱怨XML格式不正确,并且缺少一些结束标记,这是预期的,因为它没有完整的SOAP响应 解决方案是将Axis配置为使用默认支持HTTP 1.1的CommonHttpSender。您可以通过在org/apache/axis/client/client-config.wsdd下的类路径上添加client-config.wsdd来完成此操作,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="ApacheCommonsHTTPConfig" xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
</globalConfiguration>
<transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />
<transport name="local" pivot="java:org.apache.axis.transport.local.LocalSender" />
<transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender" />
</deployment>
相关设置是名为“http”的传输。
大多数应用服务器已经在其类路径中加载了此类,如果不是这样,您需要将添加到类路径中。非常有用!谢谢@Zak!