我尝试了几件事:
1)
<xs:simpleType name="matchAnalysisType">
<xs:restriction base="xs:string">
<xs:enumeration value="A"/>
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
JaxB不会生成枚举,而是将matchAnalysisType标记为相应元素类型的字符串。
2)使用'nillable':
<xs:element name="matchAnalysisType" type="matchAnalysisType"
nillable="true">
</xs:element>
JaxB抛出''无效的错误。
该问题适用于其他元素类型,如下所示:
<xs:element name="accountNumber" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:totalDigits value="9"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
我想要一个示例xml,允许以下内容,而不会出现任何验证错误。
<accountNumber></accountNumber>
思想?
答案 0 :(得分:2)
JAXB没有与“”对应的枚举值的默认枚举值名称。如果使用外部绑定文件提供名称,则JAXB实现可以生成与此XML模式类型对应的Java枚举。
<强> binding.xml 强>
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="your-schema.xsd">
<jxb:bindings node="//xs:simpleType[@name='matchAnalysisType']/xs:restriction/xs:enumeration[@value='']">
<jxb:typesafeEnumMember name="BLANK"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
XJC致电
使用-b
参数
xjc -b binding.xml your-schema.xsd
了解更多信息
答案 1 :(得分:1)
以下是解决方案:
tyesafeEnumMemberName默认值为generateError,您可以指定value generateName。
我们的xjc文件中没有此属性。现在这修复了自动化。
<jxb:bindings schemaLocation="your.xsd" node="/xsd:schema">
<jxb:globalBindings typesafeEnumMaxMembers="9000" typesafeEnumMemberName="generateName" >
<xjc:simple/>
</jxb:globalBindings>