![](/img/trans.png)
[英]How to debug JAXB Marshaling failure due to identity contraint violations
[英]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.