【问题标题】:SAXParseException: XML document structures must start and end within the same entitySAXParseException:XML 文档结构必须在同一实体内开始和结束
【发布时间】:2011-09-05 10:15:55
【问题描述】:

我正在从 Apache Axis 1.4 Java 客户端调用 Web 服务。调用正确到达服务器,但客户端在大约几分钟后抛出此异常:

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 服务调用会返回大量数据。如果我将服务器配置为返回较少的数据,则调用成功完成。

注意:虽然我没有收到任何客户端超时异常,但我尝试将超时值增加到五分钟,但这没有效果。

【问题讨论】:

    标签: java web-services axis


    【解决方案1】:

    Apache Axis 1.4 默认支持 HTTP 1.0。被调用的服务器使用的是 HTTP 1.1,它显然支持分块传输编码。

    来自w3.org

    分块编码修改消息的主体,以便将其作为一系列块传输,每个块都有自己的大小指示符,后跟一个包含实体标题字段的可选尾部。这允许动态生成的内容与接收者验证其是否已收到完整消息所需的信息一起传输。

    这意味着 Axis 1.4 对 HTTP 响应中的块一无所知,并且可能在收到所有块之前关闭连接。当它试图反序列化 SOAP 消息时,它抱怨 XML 格式不正确并且缺少一些结束标记,这是预期的,因为它没有完整的 SOAP 响应。

    解决方案是将 Axis 配置为使用默认支持 HTTP 1.1 的 CommonsHTTPSender。为此,您可以在 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”的传输。 大多数应用程序服务器已经在其类路径中加载了此类,以防您不需要将Apache Commons HTTP jar 添加到您的类路径中。

    【讨论】:

    • 像魅力一样工作!谢谢@Zak!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多