JAXB错误地读取了以前编组的文件

时间:2019-05-04 06:22:30

标签: javafx jaxb

我在正确配置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。我没有更改这部分代码。

1 个答案:

答案 0 :(得分:0)

问题是您的@XmlID类中带有long id注释的属性Sim
根据{{​​3}}的javadoc:

  
      
  • JavaBean属性的类型必须为java.lang.String
  •