如何在JAXB中的两个模式中创建一个类内容?

时间:2014-04-28 11:04:09

标签: java xml jaxb

我有两个模式(Progect,系统),但所有这个模式都有一个类共享(Image),我在java中为每个这个模式生成JAXB时遇到问题我为每个这个模式都有一个类(progect中的图像和系统中的图像),但我需要一个图像用于项目架构和系统架构。 项目架构:

         <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/ProjectDataBase"
            xmlns:tns="http://www.example.org/ProjectDataBase" elementFormDefault="qualified">

            <element name="Project">
                <complexType>
                    <sequence>
                        <element name="Layer" type="tns:Layer" minOccurs="0"
                            maxOccurs="unbounded">
                        </element>
                    </sequence>
                    <attribute name="name" type="string" />
                </complexType>
            </element>

    <complexType name="Layer">
            <sequence>
                <element name="LayerName" type="string" maxOccurs="1"
                    minOccurs="1">
                </element>
                <element name="Visible" type="boolean" maxOccurs="1"
                    minOccurs="1"></element>
                <element name="Image" type="tns:Image" minOccurs="0"
                    maxOccurs="unbounded">
                </element>
            </sequence>
            <attribute name="idLayer" type="int"></attribute>
        </complexType>

<complexType name="Image">
        <sequence>
            <element name="name" type="string" maxOccurs="1"
                minOccurs="1">
            </element>
            <element name="path" type="string" maxOccurs="1"
                minOccurs="1"/>
            </sequence>
</complexType>

系统原理:

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/systemDataBase"
    xmlns:tns="http://www.example.org/systemDataBase" elementFormDefault="qualified">
<element name="SystemDataBase">
        <complexType>
            <sequence>
                <element name="Classification" type="tns:Classification"
                    minOccurs="0" maxOccurs="unbounded">
                </element>
            </sequence>
        </complexType>
    </element>

    <complexType name="Classification">
        <sequence>
            <element name="Image" type="tns:Image" maxOccurs="unbounded"
                minOccurs="0"></element>
        </sequence>
        <attribute name="id" type="int"></attribute>
    </complexType>

    <complexType name="Image">
        <sequence>
            <element name="name" type="string" maxOccurs="1" minOccurs="1">
            </element>
            <element name="path" type="string" maxOccurs="1" minOccurs="1">
            </element>
        </sequence>
    </complexType>
</schema>

1 个答案:

答案 0 :(得分:1)

您可以在其中一个模式中定义复杂类型“Image”(比如“System”),并通过将定义模式(“System”)导入客户端模式('Project'来引用另一个模式(“Project”) ')并在本地模式元素中声明外部名称空间('System')( '工程&GT;模式')。 在生成期间,您可能必须生成剧集文件以防止模型工件重复。

This article包含有关命名空间导入需要查看结果模式的示例。所选的this question答案包含有关剧集文件的良好信息。