在编组期间,我得到了下一个例外
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,其中[row,col]:[1,1127]。请建议。
答案 0 :(得分:15)
通过在JVM选项中指定-Djaxb.debug = true,可以在控制台中看到JAXB调试输出。 另外,您可能希望在unmarshaller上设置事件处理程序: unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
答案 1 :(得分:2)
您似乎正在反序列化SOAP消息。您可以通过将-Djavax.net.debug=all
添加到JVM选项来启用HTTP调试。这将转储传入的消息。一旦您看到输入,请确保开始和结束标记匹配(根据错误消息的第二部分)。
答案 2 :(得分:1)
我建议你在XMLStreamException上创建异常断点。至少eclipse允许这样做。因此,您将能够看到抛出异常的位置。可能会有所帮助。
BTW我不确定1,1127是完全错误的。首先检查(以防万一)你在这个位置没有非法的东西。其次,检查它不是文件的第1127个字符。例如,如果文件是在Unix上生成的,其中行分隔符为\ n但是您在Windows上运行代码,其中行分隔符为\ r \ n,系统可能无法识别换行符,因此它认为您的XML格式为非常长单行。
答案 3 :(得分:0)
JAXBContext context = JAXBContext.newInstance(jaxbObjectClass);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());