簡體   English   中英

SAXParseException:XML文檔結構必須在同一實體中開始和結束

[英]SAXParseException: XML document structures must start and end within the same entity

我正在從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服務調用返回大量數據。 如果我將服務器配置為返回較少的數據,則呼叫成功完成。

注意:雖然我沒有得到任何客戶端超時異常,但我嘗試將超時值增加到五分鍾,但這沒有任何效果。

Apache Axis 1.4默認支持HTTP 1.0。 被調用的服務器正在使用HTTP 1.1,它顯然支持Chunked Transfer Encoding。

來自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添加到類路徑中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM