gpt4 book ai didi

debugging - 如何调试 JAXB 解码?

转载 作者:行者123 更新时间:2023-12-02 19:48:15 24 4
gpt4 key购买 nike

我遇到了 JAXB 解码问题。我认为我已经正确编码了它,但是我的未编码对象返回了空参数。因此,我假设在解码时,JAXB 没有看到它所期望的适当的 XML 结构。但是,我没有收到任何错误消息或抛出任何异常。

是否有办法逐步完成解码过程,以准确了解无法填充我的对象的位置/原因?

实际的解码代码相当普通:

public <T> T unmarshall(Node node, Class<T> clazz) throws JAXBException {
// Creating an unmarshaller
Unmarshaller u = JAXBContext.newInstance(clazz).createUnmarshaller();

// unmarshal an instance node into Java content
return clazz.cast(u.unmarshal(node, clazz).getValue());
}

但是,当我调用它时,我得到一个返回的 clazz 类型的对象(如预期),但未填充。

我尝试解码的 DOM 对象是由第三方 API 生成的。我已经在解码过程中遇到了一些极其奇怪的行为,这就是为什么我希望能够调试该过程。例如,如果我尝试解码 DOM 对象中的子元素(即:doc.getByElementName("myElement").item(0)),它会默默地失败。但是,如果我将文档转换为字符串,并将其重新导入到新文档中,则它可以很好地转换。

我开始感到非常沮丧,不知道如何调试这个问题。

感谢您的见解!

埃里克

最佳答案

您可以尝试使用默认处理程序。

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

来自 javadoc:

public class DefaultValidationEventHandler

extends Object

implements ValidationEventHandler

JAXB 1.0 only default validation event handler. This is the default handler for all objects created from a JAXBContext that is managing schema-derived code generated by a JAXB 1.0 binding compiler. This handler causes the unmarshal and validate operations to fail on the first error or fatal error.

这将产生更详细、更有用的调试输出。

关于debugging - 如何调试 JAXB 解码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com