具有数值的JAXB枚举

编程入门 行业动态 更新时间:2024-10-27 22:27:19
本文介绍了具有数值的JAXB枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想限制这样的输入值

<simpleType name="SomeCode"> <restriction base="string"> <enumeration value="036222B"/> <enumeration value="036111C"/> </restriction> </simpleType>

但这不会生成枚举。我怀疑这是因为值以数字开始,这是不允许的枚举值。

But this does not generate an Enum. I suspect it is because the values start with numbers and this is not allowed for Enum values.

有没有解决方法或解决方法?

Is there any solution or workaround?

推荐答案

这是我可以帮助的类似问题的答案(见问题2):

Here is my answer to a similar question that may help (see issue 2):

  • 枚举不匹配模式:jaxb或xsd的问题?
  • Enums don't match schema: problem with jaxb or xsd?

有几个引起此问题的枚举值。可以通过使用JAXB外部绑定文件来克服这些问题(见下文)。

There are a couple of enumeration values that are causing this issue. These issues can be overcome through the use of a JAXB external binding file (see below).

枚举问题#1 - 空字符串

您的某些枚举值空字符串(),这将导致生成一个String而不是一个枚举属性:

Some of your enum values are empty string (""), which is causing a String rather than an enum property to be generated:

<xs:enumeration value=""> <xs:annotation> <xs:documentation>Blank</xs:documentation> </xs:annotation> </xs:enumeration>

枚举问题#2 - 数字字符串

某些枚举值是导致生成String而不是枚举属性的数字:

Some of the enum values are numbers which is causing a String rather than an enum property to be generated:

<xs:enumeration value="6"> <xs:annotation> <xs:documentation>6th grade</xs:documentation> </xs:annotation> </xs:enumeration>

绑定文件(bindings.xml)

以下绑定文件可用于解决 educationLevelType 的问题,这里的概念可以应用于所有有问题的类型:

The following bindings file can be used to address the issues with the educationLevelType, the concepts here can be applied to all the problematic types:

<jxb:bindings xmlns:xs="www.w3/2001/XMLSchema" xmlns:jxb="java.sun/xml/ns/jaxb" version="2.1"> <jxb:bindings schemaLocation="www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd"> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='6']"> <jxb:typesafeEnumMember name="SIX"/> </jxb:bindings> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='7']"> <jxb:typesafeEnumMember name="SEVEN"/> </jxb:bindings> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='8']"> <jxb:typesafeEnumMember name="EIGHT"/> </jxb:bindings> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='9']"> <jxb:typesafeEnumMember name="NINE"/> </jxb:bindings> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='10']"> <jxb:typesafeEnumMember name="TEN"/> </jxb:bindings> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='11']"> <jxb:typesafeEnumMember name="ELEVEN"/> </jxb:bindings> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='12']"> <jxb:typesafeEnumMember name="TWELVE"/> </jxb:bindings> <jxb:bindings node="//xs:simpleType[@name='educationLevelType']/xs:restriction/xs:enumeration[@value='']"> <jxb:typesafeEnumMember name="BLANK"/> </jxb:bindings> </jxb:bindings> </jxb:bindings>

XJC调用可以如下(-nv标志如下所述):

The XJC call can be made as follows (the -nv flag is described below):

xjc -nv -b bindings.xml -d out www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd

这将导致生成以下枚举:

This will cause the following Enum to be generated:

package gov.hhs.acf.nytd; import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlEnumValue; import javax.xml.bind.annotation.XmlType; @XmlType(name = "educationLevelType") @XmlEnum public enum EducationLevelType { @XmlEnumValue("under 6") UNDER_6("under 6"), @XmlEnumValue("6") SIX("6"), @XmlEnumValue("7") SEVEN("7"), @XmlEnumValue("8") EIGHT("8"), @XmlEnumValue("9") NINE("9"), @XmlEnumValue("10") TEN("10"), @XmlEnumValue("11") ELEVEN("11"), @XmlEnumValue("12") TWELVE("12"), @XmlEnumValue("post secondary") POST_SECONDARY("post secondary"), @XmlEnumValue("college") COLLEGE("college"), @XmlEnumValue("") BLANK(""); private final String value; EducationLevelType(String v) { value = v; } public String value() { return value; } public static EducationLevelType fromValue(String v) { for (EducationLevelType c: EducationLevelType.values()) { if (c.value.equals(v)) { return c; } } throw new IllegalArgumentException(v); } }

maxOccurs Issue

maxOccurs Issue

对于maxOccurs问题,使用 no verify (-nv)标志的以下命令行可用于解析XML模式:

For the maxOccurs issue, the following command line with the no verify (-nv) flag can be used to parse the XML schema:

xjc -nv -d out www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd

这将让您超越以下错误,而无需修改XML模式: / p>

This will get you past the following error without having to modify the XML schema:

解析模式... [ERROR]当前解析器的配置不允许maxOccurs属性值为设置为大于值5,000。 第41行 www.acf.hhs.gov/programs/cb/systems/nytd/nytd_data_file_format.xsd

无法解析模式。

For More Inf ormation

  • blog.bdoughan/2011/08/jaxb-and-enums.html
  • blog.bdoughan/2011/08/jaxb-and-enums.html

更多推荐

具有数值的JAXB枚举

本文发布于:2023-07-26 09:36:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1215533.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数值   JAXB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!