加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JAXB生成简单类型缺失限制

发布时间:2020-12-15 04:15:47 所属栏目:Java 来源:网络整理
导读:我正在生成我的第一个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中我有
我正在生成我的第一个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>
 * &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编号会失败吗?

解决方法

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

欲获得更多信息

> http://blog.bdoughan.com/2010/12/jaxb-and-marshalunmarshal-schema.html
> http://blog.bdoughan.com/2010/11/validate-jaxb-object-model-with-xml.html

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

> https://www.java.net//forum/topic/glassfish/metro-and-jaxb/jaxb-plugin-generate-bean-validation-annotations-jsr-303

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读