Xml Schema / JaxB - 如何在架构中启用空枚举,字符串,整数值而不验证错误?

时间:2011-10-10 14:15:53

标签: jaxb xsd

我尝试了几件事:

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> 

思想?

2 个答案:

答案 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调用中指定绑定文件
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>