如何创建用于将complexType更改为simpleType的绑定文件

时间:2014-02-25 10:48:47

标签: java xml jaxb xsd xjb

我在XSD架构中有一个字段:

<xs:element name="magicField">
    <xs:simpleType>
        <xs:restriction base="xs:int">
            <xs:totalDigits value="8"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

在java类中生成了一个字段:

int magicField;

但是,xsd架构已更改为:

<xs:element name="magicField">
    <xs:complexType>
        <xs:simpleContent>
            <xs:restriction base="int_code">
                <xs:totalDigits value="8"/>
            </xs:restriction>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

“int_code”:

<xs:complexType name="int_code">
    <xs:simpleContent>
        <xs:extension base="xs:positiveInteger">
            <xs:attribute name="name"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

JAXB生成以下代码:

MagicField magicField;

和另外的MagicField.java。

但我仍然只需要

int magicField;

生成的代码。
根本不会使用属性“名称”。

我无法更改架构,我的方式只是绑定文件(xjb)。

如何创建绑定以重新映射“int_code”类型并将“magicField”设置为simpleType(代码中为int),而不是complexType(代码中为magicField)?

据我所知,我还需要一个自定义的XmlAdapter,而不仅仅是绑定规则。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用以下代替而不是创建复杂类型int_code:

<xs:element name="magicField">
<xs:complexType>
    <xs:simpleContent>
        <xs:restriction base="xs:positiveInteger">
            <xs:totalDigits value="8"/>
        </xs:restriction>
    </xs:simpleContent>
</xs:complexType>

或者更好的方法是为magicField创建一个simpleType,如下所示:

   <xs:element name="magicField">
    <xs:simpleType>
        <xs:restriction base="xs:positiveInteger">
            <xs:totalDigits value="8" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

希望这有帮助。