gpt4 book ai didi

java - @XmlIDREF 编码到 XML 时看不到层次结构

转载 作者:行者123 更新时间:2023-12-01 04:42:40 26 4
gpt4 key购买 nike

我对 XML 很陌生,我遇到了一个无法解决的问题,在环顾了几个小时后,我决定发布我的问题。

我使用 @XmlIDREF 来获取 XML 文档中某些 Java 类的 XmlID。一切工作正常,但是当 JAXB 在树层次结构中查找 ID depeen 时,它似乎找不到它并再次编码整个对象。

我将向您展示(简化的)模型,它都是关于光学路由器的,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
}

当我编码端口 channel 时,一切正常,因为它们没有子类......但是当需要编码卡时如果它是 AddCard 或 DropCard,它会再次对其进行编码,而不是使用 IDREF。JAXB 似乎在层次结构中找不到它们...

如果我更改了原来的“Card 卡;”例如,“AddCard”的 FiberConnection 也可以工作(JAXB 找到 IdREF 并且不会再次对其进行编码)。

希望我已经解释清楚了。如果没有,请询​​问,我很乐意回答:)

提前致谢!

<小时/><小时/>

已编辑

好的,我带着新的信息和结果回来了,以便更好地解释自己。

由于它是一个巨大的类模型,我不想让这篇文章变得太难以阅读,我创建了一种 UML 类图,以使其更容易阅读一些应该有所帮助的重要信息(XML 注释)和参数)。正如 Blaise 所建议的那样,我还添加了 @XmlElement 标签(再次感谢)。

  • 在这里您可以找到yEd UML 存档:yEd file
  • 如果您没有/想要下载图表,还有一个UML jpg编辑:jpg file

我还包含(完成)XML 的一部分,以便更好地了解发生的情况。

这里我有一个如上所述的 FiberConnection。

我有一个scCard和一个 FiberChannelPlan,它们之前已经在 XML 文档上编码过(选中),但它们是再次集结...

作为交换,srcPortsrcChannelfibreChannels(之前也已编码)只有它们的 ID。

<OpticalRouter>
<fiberConnections>
<instanceID>FiberConnection@29e83b01</instanceID>
<srcCard xsi:type="DropCard" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<instanceID>DropCard@6b02b23d</instanceID>
<type>11</type>
<subtype>1</subtype>
<chasis>0</chasis>
<fiberChannelPlan xsi:type="ChannelPlan">
<instanceID>ChannelPlan@7e246b6d</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>Port@4f781d1d</cardExpressPort>
<carCommonPort>Port@56bf83ad</carCommonPort>
</srcCard>
<srcPort>Port@56bf83ad</srcPort>
<srcChannel>Channel/184</srcChannel>
</fiberConnections>
</OpticalRouter>

我认为问题与我发现的那篇文章(即使我使用的是 linux 和 java 1.6)或我在 StarckOverflow 上看到的其他文章有关:java.net/jira/browse/JAXB-870

提前致谢!

P.S:我使用的所有代码都是开源的,如果有人认为这对他来说应该更容易,可以从 git 存储库的主要源下载。

最佳答案

您需要确保图中的每个对象都是通过包含/嵌套关系(例如@XmlElement)引用的,这形成了XML。我看不出您的模型中哪里满足此要求。然后,您可以使用 @XmlID/@XmlIDREF 在树中建立基于键的关系,将其转换为图表。

了解更多信息

关于java - @XmlIDREF 编码到 XML 时看不到层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284764/

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