JAXB xs:maxLength 和 minOccurs="0" 未在 xsd 生成的类中显示

Posted

技术标签:

【中文标题】JAXB xs:maxLength 和 minOccurs="0" 未在 xsd 生成的类中显示【英文标题】:JAXB xs:maxLength and minOccurs="0" didn't show in generated class by xsd 【发布时间】:2013-11-27 05:07:25 【问题描述】:

我在 xsd 模式中有不同的复杂类型,我使用 Jaxb 在 java 类上呈现这个。我以这种方式在 javaclass 中展示了成功的复杂类型枚举:

<xs:element name="SistemaEmissione" type="SistemaEmissione" />
<xs:simpleType name="SistemaEmissione">
<xs:restriction base="xs:string">
<xs:maxLength value="1"/>
<xs:enumeration value="P"/>
<xs:enumeration value="G"/>
</xs:restriction>
</xs:simpleType>

但我无法在 java 生成的类中表达这个限制

<xs:element name="Master" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="15"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

minOccurs="0" 和 maxLength value="15" 都播种在生成的 java 类中。

任何人都可以帮助我吗? tnx

【问题讨论】:

【参考方案1】:

minOccurs="0"

minOccurs@XmlElement 注释的required 属性中被捕获。

http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlElement.html#required()

xs:maxLength

这不会在元数据中捕获。如果您希望验证您的对象数据,您可以在您的MarshallerUnmarshaller 上设置Schema 的实例。

http://blog.bdoughan.com/2010/12/jaxb-and-marshalunmarshal-schema.html

【讨论】:

Tnx 我非常尝试在编组阶段使用验证处理程序 但是如果我不想在最终的 xml 结果中包含一个不尊重 maxLength 的节点,我该怎么办?

以上是关于JAXB xs:maxLength 和 minOccurs="0" 未在 xsd 生成的类中显示的主要内容,如果未能解决你的问题,请参考以下文章

JAXB 继承,解组到编组类的子类

JAXB和XStream比较

JAXB简单样例

JAXB最佳实践

JAXB XML和Bean互相转换

XML编程总结——使用JAXB进行java对象和xml格式之间的相互转换