JAXB绑定-将typesafeEnumBase设置为空(将枚举转换为字符串)



根据链接

如果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"/>)。

(如果有人知道如何做到这一点,我也想知道,所以请评论或回答)。

最新更新