我在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。

提前致谢。

最佳答案

您可以使用以下命令来代替创建复杂类型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>


希望这可以帮助。

09-25 22:23