xjc不能正确处理下划线

时间:2013-11-26 13:47:48

标签: java jaxb xjc

非常简单的用例。将以下XSD翻译为java:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="Foo_Bar">
    <xs:sequence>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="choices" type="TypeMyEnum" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="TypeMyEnum">
      <xs:restriction base="xs:string">
          <xs:enumeration value="ALPHA_1_0_0"/>
          <xs:enumeration value="BETA_2_0_0"/>
      </xs:restriction>
  </xs:simpleType> 
</xs:schema>

默认情况下,xjc将创建一个名为FooBar.java的文件和一个名为TypeMyEnum.java的文件。注意xjc&#34; ate&#34; Foo_Bar中的下划线。此外,默认情况下,TypeMyEnum的内部结构如下所示:

ALPHA_1_0_0,
BETA_2_0_0;

要在Foo_Bar中获得下划线,我必须使用绑定文件,如下所示:

<jxb:bindings version="1.0"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
    <jxb:globalBindings underscoreBinding="asCharInWord"/>
</jxb:bindings>

现在,代码会根据需要生成一个Foo_Bar.java文件,但可怕地将TypeMyEnum的内部更改为:

@XmlEnumValue("ALPHA_1_0_0")
ALPHA___1___0___0("ALPHA_1_0_0"),
@XmlEnumValue("BETA_2_0_0")
BETA___2___0___0("BETA_2_0_0");
private final String value;

似乎枚举值中的每个下划线都更改为三个下划线。这很容易重现,而且超出了我为什么xjc会这样做。

有没有办法让xjc在类名中保留下划线(即Foo_Bar.java)并生成一个合理的枚举文件?我不想进入为我的架构中的每个枚举生成特定绑定的业务。

0 个答案:

没有答案