5

在编组期间,我得到了下一个异常

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.]

所以我想查看 [row,col]:[1,1127] 所在的 xml。请建议。

4

4 回答 4

16

您可以通过在 JVM 选项中指定 -Djaxb.debug=true 在控制台中查看 JAXB 调试输出。此外,您可能希望在解组器上设置事件处理程序: unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());

于 2012-03-06T10:50:31.433 回答
2

看来您正在反序列化 SOAP 消息。-Djavax.net.debug=all您可以通过添加到您的 JVM 选项来启用 HTTP 调试。这将转储传入的消息。一旦您可以看到您的输入,请确保开始和结束标签匹配(根据错误消息的第二部分)。

于 2011-07-13T15:17:58.247 回答
2
JAXBContext context = JAXBContext.newInstance(jaxbObjectClass);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
于 2014-02-26T12:13:31.490 回答
1

我建议您在 XMLStreamException 上创建异常断点。至少eclipse允许这样做。因此,您将能够看到引发异常的点。可能会有所帮助。

顺便说一句,我不确定 1, 1127 是否完全错误。首先检查(以防万一)你在这个位置没有违法的东西。其次,检查它是否不是文件的第 1127 个字符。例如,如果文件是在行分隔符为 \n 的 Unix 上生成的,但您在行分隔符为 \r\n 的 Windows 上运行代码,则系统可能无法识别换行符,因此它认为您的 XML 被格式化为非常长单行。

于 2011-07-13T15:10:23.447 回答