来自XSD的JAXB自动生成:对特定元素

时间:2018-02-07 08:16:39

标签: java xml xsd jaxb

我正在从xsd文件生成Java类。我有几十个完美的元素/类。但是对于一个类我只想使用自己的类,而不是生成的类。

    <xs:element name="mytype">
    <xs:complexType>
        <xs:all>
            <xs:element ref="mytype" minOccurs="0"/>
        </xs:all>
        <xs:attribute name="type" use="required">
            <xs:simpleType>
                <xs:union>
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:pattern value="somepattern"/>                                
                        </xs:restriction>
                    </xs:simpleType>
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="enum1"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:union>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="t2" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:double"/>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="t1" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:double"/>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>

为了设置这些,我读了一些来源并定义了xjb文件,如下所示:

<jaxb:bindings schemaLocation="schema.xsd" node="//xs:schema">
    <jaxb:bindings node="xs:element[@name='mytype']">
    <jaxb:class implClass="com.package.MyType" name="MyType" />
    </jaxb:bindings>
</jaxb:bindings>

简而言之,我只想使用我的类 com.package.MyType 来处理xsd文件中的 mytype 元素。我尝试了一些其他功能,如适配器,但无法解决问题。

当我尝试附加方法时,我在ObjectFactory.java和MyType.java(生成)上遇到不兼容类型错误。因为它试图返回我的类型,但它不是生成类型的子类。

这是ObjectFactory.java上的一行:

public com.autogenerate.MyType createMyType() {
    return new com.package.MyType();
}

这是com.autogenerate.MyType.java上的一行:

public com.autogenerate.MyType getMyType() {
    return mytype;    //com.package.MyType
}

1 个答案:

答案 0 :(得分:0)

尝试:

<jaxb:class ref="com.package.MyType"/>

这应该使用com.package.MyType而不是生成com.autogenerate.MyType