- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 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 标签(再次感谢)。
我还包含(完成)XML 的一部分,以便更好地了解发生的情况。
这里我有一个如上所述的 FiberConnection。
我有一个scCard和一个 FiberChannelPlan,它们之前已经在 XML 文档上编码过(选中),但它们是再次集结...
作为交换,srcPort、srcChannel 和 fibreChannels(之前也已编码)只有它们的 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/
我有一个对象 (A),它具有另一个对象 (B) 的属性。当编码对象 A 时,我存储对对象 B 的引用。B 中的 ID 本身就是一个对象(Mongo ObjectId)。我已将 MongoId 对象包装
我有课 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "customerOrder", propOrder = { "demand
我有一个相当复杂的数据结构,我似乎无法正确解码。 @XmlRootElement class Tree { @XmlID private String id; @XmlJavaTypeAd
我对 XML 很陌生,我遇到了一个无法解决的问题,在环顾了几个小时后,我决定发布我的问题。 我使用 @XmlIDREF 来获取 XML 文档中某些 Java 类的 XmlID。一切工作正常,但是当 J
我已经研究这个问题好几个小时了,可能很简单,但我不再明白了: 我有一个通过 jax-rs 呈现为 json 的实体 (Param)。该实体引用另一个实体(步骤)。在编写/读取 json 时,我不想看到
好的。我是 JAXB 新手,在 XmlID 和 XmlIDREF 方面遇到一些麻烦,其中 ID 位于抽象类中。 这是我的问题: 抽象类 @XmlAccessorType(XmlAccessType.F
jaxb @XmlIDREF @XmlID 工作惊人 我的 xml 输入是 1
本文整理了Java中org.apache.xmlbeans.XmlIDREF.set()方法的一些代码示例,展示了XmlIDREF.set()的具体用法。这些代码示例主要来源于Github/Stack
我有以下类(class): @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Employee {
我正在尝试使用 JAXB 整理一些数据。我的问题如下:我有一个类 Frame,其中包含信号图。 @XmlRootElement(name = "frame") @XmlAccessorType(Xml
我已经为我遇到的问题设置了一个最小的工作示例。这些是 JAXB 类。 moxytest/A.java package moxytest; @XmlRootElement public class A
我想知道是否可以注释我的类,以便编码器第一次遇到一个对象时,它会生成一个适当类型的 XML 元素,但是任何其他任何对该对象的后续引用都将具有一个 XML IDREF条目已创建? 最佳答案 您可以利用
我正在使用 jax-ws 编写 Web 服务。 Web 服务的方法之一返回 bean,其中包含对其父级的引用。为了防止循环引用,我在我的 bean 中使用了 JAXB @XMLID 和 @XMLIDR
我有以下 XML: RIGHT1 RIGHT_NOT_EXISTING 这里是映射: @XmlAccessorType(XmlAccessType.FIELD) publ
我正在尝试使用 MOXy JAXB 来序列化类 A,它看起来像: @XmlAccessorType(XmlAccessType.NONE) @XmlRootElement public class A
我正在使用 CXF 公开 Web 服务。我使用 @XmlID 和 @XmlIDREF JAXB 注释来在编码/解码期间维护对象图的引用完整性。 WSDL 正确地包含具有 xs:id 和 xs:idre
您好,我在使用网络服务时遇到问题我有一个包含许多角色的用户对象。 当我从包含一个角色的网络服务中获取一个用户(Id:3)时,该角色包含许多用户(id:3和id 2)。我收到一个错误 由以下原因引起:j
更新 - 查看底部的编辑 IDRefs/keyrefs 似乎在 JAXB 注释中是可能的,但 ref 最终成为元素文本。 我希望 ref 是元素的属性。 例如,给定这个对象模型: @XmlType p
我想知道是否可以对我的类进行注释,以便编码器第一次遇到对象时,它会生成适当类型的 XML 元素,但任何其他对该对象的后续引用都将具有 XML IDREF条目已创建? 最佳答案 您可以利用 JAXB 的
我有这样两个实体: @XmlRootElement(name = "provider") @XmlAccessorType(XmlAccessType.PROPERTY) @Entity pub
我是一名优秀的程序员,十分优秀!