gpt4 book ai didi

java - Jaxb 编码 Point 变量

转载 作者:行者123 更新时间:2023-11-30 03:04:29 25 4
gpt4 key购买 nike

因此,我开始使用 Jaxb 创建我的程序中使用的文件的 XML 副本。

在我的代码中实现后,我没有遇到任何问题,直到我最近向我的主类添加了一个新类。

它保存/加载得很好,类是空白/未使用的,但我得到 StackOverflowErrors当尝试用一些数据对类进行编码时。 (在一种情况下,它会毫无问题地进行编码??)

错误信息

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.reflect.Reflection.quickCheckMemberAccess(Reflection.java:84)
at java.lang.reflect.Field.get(Field.java:388)
at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$FieldReflection.get(Accessor.java:250)
at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:118)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:345)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:143)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:345)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)
at com.sun.xml.internal.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:143)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:345)
at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:681)

.xml输出的文件看起来很正常,直到它遇到我添加的新类,这就是它变坏的地方。

<positionPercentage>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>
<x>0</x>
<y>0</y>
<location>

通常是 ws 的 xml类看起来像这样。它包含 Map<String, WidgetLink> WidgetLinks 。这将 key 字符串映射到 WidgetLinkWidgetLink类包含 WidgetCode , Point positionPercentage和两根弦。 point变量好像是程序的问题

<ws>
<widgetLinks>
<entry>
<key>Main-Comp Rack Fault `%rackname`</key>
<value>
<widgetCode>
<widgetName>LED-Circle-25x25</widgetName>
<variables>
<entry>
<key>`%XPOS%`</key>
<value></value>
</entry>
<entry>
<key>`%YPOS%`</key>
<value></value>
</entry>
<entry>
<key>`%IO_ID%`</key>
<value></value>
</entry>
</variables>
<fullWidgetText> ALOT OF CODE CUT OUT BUT IT PRINTS FINE</fullWidgetText>
<filePath>LED-Circle-25x25.txt</filePath>
</widgetCode>
<positionPercentage>
<x>0</x>
<y>0</y>
</positionPercentage>
<variableName>Comp Rack Fault `%rackname`</variableName>
<panelName>Main</panelName>
</widgetLinks>
</ws>

我不知道<location>是什么元素是什么,或者它来自哪里?

我所有的类(class)都使用 @XmlAccessorType(XmlAccessType.FIELD)和我的主课Store使用代码@XmlRootElement(name = "Store")
@XmlAccessorType(XmlAccessType.FIELD)

该错误是否与 Point 有关变量?

编辑 - 我做了 Point变量 static,因此不会使用 XmlAccessType.FIELD 的当前设置写入它它写得很好。我如何编码点变量?

最佳答案

好吧,我找到了一个页面,解释了为什么 Point 变量会导致这些无限循环错误 -> StackOverflowError

Sometimes the best way to handle an unmappable class is to write a "stand-in" class which can be mapped with JAXB, and convert between the two classes in the XmlAdapter. In this example, we want to use the Point class. Because of that class' getLocation() method (which JAXB will pickup automatically and map), an infinite loop will occur during marshalling. Because we cannot change the Point class, we will write a new class, MyPoint, and use it in the adapter. - See more at: http://www.eclipse.org/eclipselink/documentation/2.4/moxy/advanced_concepts006.htm#sthash.A8OXPKIV.dpuf

关于java - Jaxb 编码 Point 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35157008/

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