3

根据链接

如果 typesafeEnumBase 设置为 xsd:string,这将是一种全局方式来指定所有直接或间接从 xsd:string 派生并具有枚举方面的简单类型定义应默认绑定到类型安全枚举。如果 typesafeEnumBase 设置为 空字符串 "",则默认情况下不会将简单类型定义绑定到类型安全枚举类。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.

我想要的只是将以下内容转换Stringenum

<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为对我来说没有任何答案(都尝试过)。

4

2 回答 2

3

设置以下

<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.
于 2017-10-25T13:23:19.970 回答
2

您可以为具有枚举限制的特定简单类型指定不希望将其映射到 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:typesafeEnumClass map="false"/>直接在 a<jaxb:globalBindings>中使用)。

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

于 2017-10-25T13:08:19.643 回答