繁体   English   中英

如何调试 JAXB 中的编组?

[英]How to debug marshaling in 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.]

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM