根据link
如果typesafeEnumBase设置为xsd:string,那么它将是一种全局方式 指定所有简单类型定义直接派生或 间接来自xsd:string并且具有枚举方面应该是 默认绑定到类型安全枚举。如果typesafeEnumBase设置为 空字符串,"" ,不会将简单的类型定义绑定到a 默认情况下,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问题是here,但由于我无法设置空字符串""
或将xsd:boolean
值设置为typesafeEnumBase
,所以答案都不适合我(尝试过)两者)。
答案 0 :(得分:2)
您可以为具有枚举限制的特定简单类型指定您不希望它映射到Java enum
,如下例所示:
<?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:typesafeEnumClass map="false"/>
内直接使用<jaxb:globalBindings>
。
(如果有人知道如何做到这一点,我也想知道,所以请评论或回答)。
答案 1 :(得分:2)
设置以下
<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.