我获得了多个XSD文件A.xsd
,B.xsd
和C.xsd
,它们使用IDREF
和ID
通过XInclude引用彼此的元素而没有循环依赖。 A.xsd
是我在层次结构中的根文件。
使用XJB和绑定文件,我管理它以从XSD生成一致的Java代码。
成功创建Java对象a
,b
和c
后,我正在尝试将它们编组为XML文件。这就是我被卡住的地方。
将a
封送到文件a.xml
时,b
和c
无处存储,a.xml
不包含对它们的引用。
如何成功存储所有对象和引用?
我手头有以下方法,但它们不可变:
b
中包含c
和a.xsd
的类型,而不是使用IDREF
。不起作用,因为我最后想要多个XML文件。a
对象,并查找b
和c
的所有实例。然后完全封送所有b
和c
s并使用XInclude来引用生成的文件。这似乎是不合适的,因为我不希望我的存储机制知道所有类的所有内部。我只想存储我的a
,JAXB编组应尽可能自己存储依赖项。以下问题与此问题有关,因为他们希望生成多个XML文件。但是他们都没有考虑XSD文件和XJC绑定文件中给出的信息,因此需要操纵生成的java代码,一些非平凡的编程开销和某种信息重复。
答案 0 :(得分:2)
@XmlID
& @XmlIDREF
用于促进单个XML文档中的引用。
如果您有一个从多个XML模式生成的模型到多个包中,那么您需要确保创建JAXBContext
以了解所有这些类。一种方法是在包名称的冒号分隔JAXBContext
上创建String
。
JAXBContext.newInstance("com.example.pkg1:com.example.pkg2:com.example.pkg3");