JAXB生成了简单类型缺失限制

时间:2013-11-26 15:10:38

标签: java jaxb

我目前正在生成我的第一个JAXB数据绑定。我有一个架构,其中包含一个xs:simpleType:

<xs:simpleType name="NINumberType">
    <xs:restriction base="xs:string">
        <xs:pattern value="[A-Z]{2}\d{6}[A-D]{0,1}"/>
    </xs:restriction>
</xs:simpleType>

在我的binding.xjb中,我有这个:

<jxb:bindings version="1.0"
     xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
     xmlns:xs="http://www.w3.org/2001/XMLSchema"
     xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
     jxb:extensionBindingPrefixes="xjc">

     <jxb:bindings schemaLocation="mySchema.xsd" node="/xs:schema">
         <jxb:globalBindings mapSimpleTypeDef="true" />
         <jxb:schemaBindings>
             <jxb:package name="com.company.jaxb.mySchema"/>
         </jxb:schemaBindings>
     </jxb:bindings>

</jxb:bindings>

然后,通过Eclipse(RAD 7.5),我右键单击架构,然后选择Generate-&gt; Java。这会产生预期的数据绑定对象,但NINumberType没有内置限制:

/**
 * <p>Java class for NINumberType simple type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;simpleType name="NINumberType">
 *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
 *     &lt;pattern value="[A-Z]{2}\d{6}[A-Z]{0,1}"/>
 *   &lt;/restriction>
 * &lt;/simpleType>
 * </pre>
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "NINumberType", propOrder = {"value"})
public class NINumberType {
    @XmlValue
    protected String value;

    public String getValue() {return value;}
    public void setValue(String value) {this.value = value;}
}

除了类级别javadoc之外,没有提到我的模式中指定的正则表达式限制。 JAXB似乎具有生成限制代码所需的信息,但未使用它。任何人都可以帮我确保生成限制代码,以便尝试绑定格式不佳的NI编号会失败吗?

2 个答案:

答案 0 :(得分:7)

JAXB不会在Java模型中生成这些限制。如果您希望在转换为XML或从XML转换期间强制执行此约束,则可以在javax.xml.validation.Schema / Marshaller上指定Unmarshaller的实例。

了解更多信息


您可能能够找到一个利用JSR-303之类的XJC扩展来进行验证约束。以下链接可能有所帮助:

答案 1 :(得分:0)

您还可以使用xjc插件https://github.com/krasa/krasa-jaxb-tools

根据文档,它支持XJsr303Annotations并可以生成:

    对于所有复杂类型的
  • @Valid批注,可以进一步限制为仅针对已定义架构的类型生成:-XJsr303Annotations:targetNamespace=http://www.foo.com/bar
  • @NotNull注释,其值为MinOccur值> = 1的对象,或具有必需用途的属性
  • @Size用于具有minOccurs > 1
  • 的列表
  • @Size,如果有maxLengthminLength或长度限制
  • @DecimalMax限制maxInclusive
  • @DecimalMin限制minInclusive
  • @DecimalMax的{​​{1}}限制,使用以下参数启用新参数maxExclusive(inclusive=false)
  • -XJsr303Annotations:JSR_349=true的{​​{1}}限制,使用以下参数启用新参数@DecimalMinminExclusive
  • (inclusive=false),如果有-XJsr303Annotations:JSR_349=true@Digits限制。
  • totalDigits(如果有fractionDigits限制

如果您想知道如何在构建环境(@PatternPatternant)中使用XJC插件,我建议您看一下另一个插件的示例:immutable-xjc < / p>

所以我希望对您有帮助。

Generation of XSD restrictions in a schema generated from Java JAXB annotated classes

有关