我对XML非常陌生,我遇到了一个问题,我无法解决问题,并且在查找几个小时后我决定发布我的问题。@XmlIDREF在编组为XML时没有看到层次结构
我正在使用@XmlIDREF只是XML文档上的一些java类的XmlID。 所有的工作都很好,但是当JAXB寻找依赖于树层次结构的ID时,似乎无法找到它并再次释放整个对象。
我会告诉你(简化)模型,它是所有关于光路由器的java类代表了路由器和一些组件:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class OpticalRouter {
// @XmlID inherited from upper class
private List<FiberConnection> fiberConnections = new ArrayList<FiberConnection>();
}
这是一个光纤连接:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class FiberConnection {
@XmlID
private String instanceID;
@XmlIDREF
Card card;
@XmlIDREF
Port port;
@XmlIDREF
Channel channel;
}
而且终于:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({
DropCard.class,
AddCard.class
})
public class Card{
// @XmlID inherited from supper class
}
所有工作正常,当我马歇尔端口和频道,因为他们没有子类....但是当它是时间编组卡如果它是一个AddCard或DropCard它封送它另一次,而不是使用IDREF。 看来,JAXB没有找到他们的层次结构...
如果我改变原来的“卡卡”, FiberConnection为“AddCard”,例如它也可以工作(JAXB找到IdREF并且不再编组它)。
希望我解释清楚。 问如果不是,我会很高兴回答:)
在此先感谢!
EDITED
好吧,我回来了新的信息和结果,以更好地解释自己。
由于它是一个庞大的类模型,我不想让帖子难以阅读,所以我创建了一种UML类图,使它更易于阅读,这些信息应该有助于帮助(XML注释和参数)。我还包括@XmlElement标签,正如Blaise告诉我的一样(再次感谢)。
我还包括(完成)XML的一部分以更好地了解发生了什么。
在这里我有一个fiberConnection如上所述。
我有一个scCard和fiberChannelPlan已已经之前的XML文档(检查),但他们正在重新整理 ...编组
在交流中,srcPort,srcChannel和fiberChannels,也编制过,只有他们的ID。
<OpticalRouter>
<fiberConnections>
<instanceID>[email protected]</instanceID>
<srcCard xsi:type="DropCard" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<instanceID>[email protected]</instanceID>
<type>11</type>
<subtype>1</subtype>
<chasis>0</chasis>
<fiberChannelPlan xsi:type="ChannelPlan">
<instanceID>[email protected]</instanceID>
<firstChannel>0</firstChannel>
<lastChannel>0</lastChannel>
<maxFreq>196.1</maxFreq>
<minFreq>191.6</minFreq>
<fiberChannels>Channel/360</fiberChannels>
<fiberChannels>Channel/368</fiberChannels>
<fiberChannels>Channel/376</fiberChannels>
<fiberChannels>Channel/384</fiberChannels>
</fiberChannelPlan>
<cardExpressPort>[email protected]</cardExpressPort>
<carCommonPort>[email protected]</carCommonPort>
</srcCard>
<srcPort>[email protected]</srcPort>
<srcChannel>Channel/184</srcChannel>
</fiberConnections>
</OpticalRouter>
我认为这个问题是关系到那个帖子,我发现(即使我使用Linux和Java 1.6)或我在这里看到的StarckOverflow其他职位的东西: java.net/jira/browse/JAXB-870
在此先感谢!
P.S:我使用的所有代码都是开源的,如果有人认为它应该对他更容易,可以从git仓库的主要源代码下载。
也许我很困惑,但我不认为这里所说的'ports'或'channels'任何成员 - 是一些这些集合排序,你没有向我们展示? – 2013-04-29 17:47:44
Nop。我忘了发布它,但**端口**和**频道**都是类似**卡**。 我一直在做一些测试,我会更新信息更多的信息。 谢谢彼得! – 2013-05-01 19:18:12
还在做一些测试,什么也没有... 任何人都知道,如果重写编组函数我可以以IDREF看到它的某种方式更改ID? – 2013-05-16 11:54:41