根据链接
如果typesafeEnumBase设置为xsd:string,则它将是指定所有直接派生的简单类型定义或间接来自xsd:string并且具有枚举方面的默认情况下绑定到类型安全枚举。如果typesafeEnumBase设置为空字符串,">,任何简单的类型定义都不会绑定到默认情况下为typesafe枚举类。typesafeEnumBase的值可以是任何原子简单类型定义,xsd:boolean除外,并且都是二进制的类型。
所以我已经将以下内容设置为我的binding.xjb
:
<jxb:globalBindings typesafeEnumBase=""/>
当运行jaxb2-maven-plugin
时,我得到以下异常:
lineNumber: 5; columnNumber: 46; cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type '#AnonType_typesafeEnumBaseglobalBindings'.
...
lineNumber: 5; columnNumber: 46; cvc-attribute.3: The value '' of attribute 'typesafeEnumBase' on element 'jxb:globalBindings' is not valid with respect to its type, 'null'.
据我所知,我不能将空字符串""
设置为typesafeEnumBase
,尽管文档中有这样的说法。文档中还提到它不能是xsd:boolean
。
我只想将以下内容转换为String
,而不是enum
<xs:simpleType name="phraseID">
<xs:restriction base="escapedStringUserType">
<xs:enumeration value="NOT_SPECIFIED"/>
<xs:enumeration value="X000-9999"/>
<xs:enumeration value="X000-9998"/>
</xs:restriction>
</xs:simpleType>
这里有一个相关的SO问题,但由于我无法设置空字符串""
或将xsd:boolean
值设置为typesafeEnumBase
,因此所有答案都不适用(两者都尝试过)。
设置以下
<jxb:globalBindings typesafeEnumMaxMembers="0"/>
不会为所有具有枚举限制的简单类型生成任何枚举,而是将它们转换为字符串,但它会在控制台中发出警告,如下所示:
Simple type "xxx-address" was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 10, current limit: 0. You can use customization attribute "typesafeEnumMaxMembers" to extend the limit.
您可以为具有枚举限制的特定简单类型指定不希望它映射到Javaenum
的类型,如本例所示:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">
<jaxb:bindings
schemaLocation="myschema.xsd"
node="/xs:schema/xs:simpleType[@name='phraseID']">
<jaxb:typesafeEnumClass map="false"/>
</jaxb:bindings>
</jaxb:bindings>
但据我所知,没有办法为所有具有枚举限制的简单类型全局设置这一点(例如,不能在<jaxb:globalBindings>
中直接使用<jaxb:typesafeEnumClass map="false"/>
)。
(如果有人知道如何做到这一点,我也想知道,所以请评论或回答)。