我想限制这样的输入值
<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枚举
发布评论