Java xsd枚举以数字下划线开头

Java xsd枚举以数字下划线开头,java,xml,enums,jaxb,xsd,Java,Xml,Enums,Jaxb,Xsd,使用jaxb从xsd定义生成java POJO源代码。定义simpleType:String、enumeration时,如果值以下划线或数字开头,则不会生成相应的枚举类。如何使用模式或设置来允许生成此类枚举 <xsd:simpleType name="TrailerType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="_20FT"/> <

使用jaxb从xsd定义生成java POJO源代码。定义simpleType:String、enumeration时,如果值以下划线或数字开头,则不会生成相应的枚举类。如何使用模式或设置来允许生成此类枚举

<xsd:simpleType name="TrailerType">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="_20FT"/>
        <xsd:enumeration value="OTHR"/>
    </xsd:restriction>

为了实现这一点,我必须添加一个手动显式绑定

<jxb:bindings  schemaLocation="common/v1/CommonTypes.xsd" node="//xs:simpleType[@name='TrailerType']/xs:restriction/xs:enumeration[@value='_20FT']">
    <jxb:typesafeEnumMember name="_20FT"/>
</jxb:bindings>

现在这可以工作了,并且生成了值为20FT的枚举,但是如果我有很多这样的枚举,我将需要添加许多显式绑定。我确信有一种更简单更通用的方法来处理这样的枚举名。
请帮助。

有两种方法可以解决您的问题

首先通过全局绑定,如@lexicore所示

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:annox="http://annox.dev.java.net"
  xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
  jaxb:extensionBindingPrefixes="xjc annox"
  version="2.1">

      <jaxb:globalBindings typesafeEnumMemberName="generateName"/>

</jaxb:bindings>
Second通过简单绑定,就像您为每个枚举所说的那样

<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:annox="http://annox.dev.java.net">
    <bindings schemaLocation="pathOfYourXSD.xsd">
        <bindings node="//xs:simpleType[@name='TrailerType']/xs:restriction/xs:enumeration[@value='_20FT']">
            <typesafeEnumMember name="_20FT"/>
        </bindings>
    </bindings>
</bindings>

下面是临时修复程序。请尝试链接答案中的绑定文件:我也尝试了这个,这会在枚举中添加更多下划线。因此,20FT在某种程度上变成了uuu20ft,而ABC_XYZ变成了ABC uxyz。您是否尝试过
?不幸的是,当有一个名为
下划线的
枚举
类,并且成员也包含
下划线时,这两个选项都不起作用。在这种情况下,第二种方法是唯一的方法。使用以下方法替代第二种建议。
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:annox="http://annox.dev.java.net">
    <bindings schemaLocation="pathOfYourXSD.xsd">
        <bindings node="//xs:simpleType[@name='TrailerType']/xs:restriction/xs:enumeration[@value='_20FT']">
            <typesafeEnumMember name="_20FT"/>
        </bindings>
    </bindings>
</bindings>
@XmlType(name = "TrailerType")
@XmlEnum
public enum TrailerType {

    _20FT,
    OTHR;

    public String value() {
        return name();
    }

    public static TrailerType fromValue(String v) {
        return valueOf(v);
    }

}