2011-07-13 45 views
3

編組期間我得到了一個異常如何在JAXB中調試封送處理?

Exception in thread "main" com.sun.xml.internal.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException 
- with linked exception: 
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1127] 
Message: XML document structures must start and end within the same entity.] 

,所以我想看到XML其中[行,列]:[1,1127]所在。請建議。

回答

1

我建議你在XMLStreamException上創建異常斷點。至少日食允許這樣做。因此,您將能夠看到引發異常的位置。可能會有所幫助。

順便說一聲我不確定1,1127是完全錯誤的。首先檢查一下(以防萬一)你在這個位置沒有違法的東西。其次,檢查它不是你的文件的第1127個字符。例如,如果文件是在Unix上生成的,其中行分隔符是\ n,但是您在Windows上運行代碼時,行分隔符是\ r \ n系統可能無法識別換行符,因此它認爲您的XML格式化爲非常長單線。

0

它似乎是反序列化SOAP消息。您可以通過將-Djavax.net.debug=all添加到JVM選項來啓用HTTP調試。這將轉儲傳入的消息。一旦你看到你的輸入,確保開始和結束標籤匹配(按照錯誤信息的第二部分)。

+0

'-Djavax.net.debug = all'給出了許多不必要的垃圾。 – Andremoniy

12

通過在JVM選項中指定-Djaxb.debug = true,您可以在控制檯中看到JAXB調試輸出。 此外,您可能想要在unmarshaller上設置一個事件處理程序: unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());

0
JAXBContext context = JAXBContext.newInstance(jaxbObjectClass); 
Unmarshaller unmarshaller = context.createUnmarshaller(); 
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());