我目前正在生成我的第一个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>
* <simpleType name="NINumberType">
* <restriction base="{http://www.w3.org/2001/XMLSchema}string">
* <pattern value="[A-Z]{2}\d{6}[A-Z]{0,1}"/>
* </restriction>
* </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编号会失败吗?
答案 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
,如果有maxLength
或minLength
或长度限制@DecimalMax
限制maxInclusive
@DecimalMin
限制minInclusive
@DecimalMax
的{{1}}限制,使用以下参数启用新参数maxExclusive
:(inclusive=false)
-XJsr303Annotations:JSR_349=true
的{{1}}限制,使用以下参数启用新参数@DecimalMin
:minExclusive
(inclusive=false)
,如果有-XJsr303Annotations:JSR_349=true
或@Digits
限制。totalDigits
(如果有fractionDigits
限制如果您想知道如何在构建环境(@Pattern
,Pattern
,ant
)中使用XJC插件,我建议您看一下另一个插件的示例:immutable-xjc < / p>
所以我希望对您有帮助。
与Generation of XSD restrictions in a schema generated from Java JAXB annotated classes
有关