我在正确配置JaxB和解组文件时遇到问题。
文件内容如下:
<members>
<sim>
<id>1</id>
<name>1</name>
<surname>11</surname>
<maidname>11</maidname>
<photo></photo>
<age>CHILD</age>
<gender>M</gender>
<race>HUMAIN</race>
<alive>true</alive>
</sim>
<sim>
<id>2</id>
<name>22</name>
<surname>22</surname>
<maidname>22</maidname>
<photo></photo>
<age>CHILD</age>
<gender>M</gender>
<race>HUMAIN</race>
<alive>true</alive>
</sim>
<sim>
<id>3</id>
<name>33</name>
<surname>33</surname>
<maidname>33</maidname>
<photo></photo>
<age>CHILD</age>
<gender>F</gender>
<race>HUMAIN</race>
<alive>true</alive>
</sim>
</members>
<relationships>
<relationship>
<id>2</id>
<type>NEUTRAL</type>
<current>false</current>
<children>
<child sim="2" isAdopted="false"/>
</children>
</relationship>
<relationship>
<id>3</id>
<type>NEUTRAL</type>
<current>false</current>
<children>
<child sim="3" isAdopted="false"/>
</children>
</relationship>
<relationship>
<id>4</id>
<type>LOVE</type>
<current>true</current>
<simLeft>3</simLeft>
<simRight>2</simRight>
<children>
<child sim="1" isAdopted="false"/>
</children>
</relationship>
</relationships>
问题是读取文件时,值SIM始终为null,我不明白为什么。
在“关系”类中,收集子级的配置如下:
@XmlElementWrapper(name = "children")
@XmlElements({@XmlElement(name = "child", type = Child.class)})
private ObservableList<Child> children = FXCollections.observableArrayList();
在儿童班:
@XmlIDREF
@XmlAttribute
public Sim getSim() {
return sim.get();
}
@XmlAttribute
public boolean isIsAdopted() {
return isAdopted.get();
}
在将Sim封装到Child类中之前,我直接整理了Sim集合,并且效果很好。但是在包装之后,它不再起作用。
@编辑 我估计有点不同... Voici一些印刷品:
unmarshall child null
unmarshall child null
AM ON -> relation : Relationship{id=LongProperty [value: 1], simLeft=null, simRight=null, type=NEUTRAL, current=false, children=[null]}
children empty ? false
children size 1
Children ?[null]
param is : null
@ Edit2 我现在看到问题更加复杂。在aboxe示例中。 当我显示第三个关系(id = 4)时,Child正确显示,但是simLeft和simRight为空。但是,当我单击其他关系时,该子对象以及simLeft和simRight都为空。
这是代码重构。在我对simLeft没问题之前,请先找到simRight。我没有更改这部分代码。
答案 0 :(得分:0)
问题是您的@XmlID
类中带有long id
注释的属性Sim
。
根据{{3}}的javadoc:
- JavaBean属性的类型必须为
java.lang.String
。