【发布时间】:2013-11-26 15:10:38
【问题描述】:
我目前正在生成我的第一个 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->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 号码会失败?
【问题讨论】: