gpt4 book ai didi

java - 是否可以查看对象图 JAXB 分析?

转载 作者:行者123 更新时间:2023-11-30 04:32:39 24 4
gpt4 key购买 nike

我有一个现有的复杂对象模型,我正在尝试将其编码为 JAXB xml。如果可能的话,我不想更改任何现有的域类。我有这个代码片段用于编码到文件(使用 Groovy)

def marshallToFile(Object objectToMarshall, File location){

def context = JAXBContext.newInstance(objectToMarshall.class)

def m = context.createMarshaller()
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true)

location.withOutputStream { out ->
m.marshal(new JAXBElement(new QName("","rootTag"),objectToMarshall.class,objectToMarshall), out)
}

}

问题是对象图非常复杂,JAXB 告诉我com.sun.istack.internal.SAXException2:在对象图中检测到循环。这将导致无限深的 XML: com.example.Object@1eef1eb[Id=100053900] -> com.example.Object@1eef1eb[Id=100053900]

有什么方法可以获取有关检测到的周期的更多信息吗?有谁知道有一种工具可以帮助分析图表或以图形方式列出它,以便我可以挑选出周期?我感觉这张图中有很多循环(它既旧又复杂),所以任何帮助将不胜感激。

也许作为替代方案,您能否告诉 JAXB 仅深入“n”层或类似的内容,这样它就不会创建无限深的 XML?

编辑:

因此,关于我的具体问题...事实证明,现有域对象定义了 Object getThis()void setThis(Object obj) 方法,该方法是“获取”和“设置”this 自引用关键字。这就是导致我周期的原因。这也强调了这样一个事实:JAXB 必须使用 JavaBean 方法定义来确定它将编码哪些属性(我之前不知道这一点)。

但是,我认为最初的问题仍然存在,是否有任何好的工具可以分析/查看对象图?

最佳答案

也许你可以介绍一个Marshaller.Listener跟踪编码过程并转储对象信息,以进行诊断。请参阅"Marshal Event Callbacks" (引用“外部监听器”的部分)了解更多信息。这不需要更改您现有的域。

关于java - 是否可以查看对象图 JAXB 分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280626/

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