我是JaxB World的新角色,我面临着一个问题w.r.t.将存储的xml内容解组到Java类对象中。问题描述如下。让我知道这是可以解决的 我有一个包含以下内容我的XSD文件(这只是一个例子) 学生信息 基于具体实例的反编组
<xs:complexType name="specialization" abstract="true">
</xs:complexType>
<xs:complexType name="Engineering">
<xs:complexContent>
<xs:extension base="specialization">
<xs:sequence>
<xs:element name="percentage" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Medical">
<xs:complexContent>
<xs:extension base="specialization">
<xs:sequence>
<xs:element name="grade" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
现在所有相应的Java类是通过编译xsd生成的。现在我们假设在我的应用程序中,我将通过构建工程类实例来设置学生信息的特化属性。因此,所有的操作后,当我保存 是得到保存会有像下面
<Student>
<Name>Name1</Name>
<Specialization>
<percentage>78<percentage>
</Specialization>
</Student>
现在,当上述内容无二解组条目的XML文件,解组失败说意想不到的元素。我想这是b'cos专业化元素是专门类型的,它调用本身的unmarshalling而不是存储的派生对象。
我希望我的解释清楚。有没有什么方法可以基于派生类实例类型进行解组? xsd和bindings.xjb文件完全在我的控制之中,所以我可以添加或修改任何表达式以传递解组规则来解开派生类。
感谢您的建议,但它仍然不适合我。
这里是我试过
选项#1 - XSI:类型
我的XSD看起来一样的东西在例子解释,但仍然是XSI的:式中不产生XML来。编译时是否需要添加其他设置?我应该使用哪个JaxB版本?
选项#2 - 替换组
当我在我的xsd中添加替换条目部分时,XSD编译失败,说重复的名称为“Engineering”和“Medical”。我猜元素名称和类型名称是相同的汇编婴儿床(所有工程,医疗,专业化在类型定义和元素名称都相同)
我无法修改生成的类,因为我们正在使用模型驱动架构。唯一掌握的就是xsd。任何对xsd的修改都是允许的。理想情况下,第一选择应该已经工作但无法弄清楚它为什么不起作用。如果您有一些建议来缩小问题,请告诉我。
感谢您的建议,但它仍然没有工作为了我。 这是我试过的 选项#1 - xsi:type 我的xsd看起来与示例中所解释的相同,但Xsi:类型不在xml中。编译时是否需要添加其他设置?我应该使用哪个JaxB版本? – user1110282 2011-12-23 14:15:25
选项#2 - 替换组 当我在我的xsd中添加替换条目部分时,XSD编译失败,说重复名称为“Engineering”和“Medical”。我猜元素名称和类型名称是相同的汇编子句(所有工程,医学,专业化在类型定义和元素名称都相同) 我不能修改生成的类,因为我们正在使用模型驱动的体系结构。唯一掌握的就是xsd。任何对xsd的修改都是允许的。理想情况下,第一选择应该已经工作但无法弄清楚它为什么不起作用。让我知道你是否有一些建议 – user1110282 2011-12-23 14:16:10