我使用maven JaxB插件从XSD生成源代码。
插件详情如下,
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.3</version>
XSD中定义的枚举有两个值,
<simpleType name="MyEnum">
<restriction base="xsd:string">
<enumeration value="SimpleText" />
<enumeration value="ComplexText" />
</restriction>
</simpleType>
生成的代码在枚举值的工作边界之间添加下划线。例如:,&#34; SimpleText&#34;在枚举中出现SIMPLE_TEXT。
生成的代码,
@XmlType(name = "MyEnum")
@XmlEnum
public enum MyEnum {
@XmlEnumValue("SimpleText")
SIMPLE_TEXT("SimpleText"),
@XmlEnumValue("ComplexText")
COMPLEX_TEXT("ComplexText");
private final String value;
MyEnum(String v) {
value = v;
}
public String value() {
return value;
}
public static MyEnum fromValue(String v) {
for (MyEnum c: MyEnum.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
当枚举在不同位置使用下划线分隔相同的文本时,会发生此问题。对于Eg;
<simpleType name="MyEnum">
<restriction base="xsd:string">
<enumeration value="My_Simple_Text" />
<enumeration value="MySimple_Text" />
</restriction>
</simpleType>
无法转换为枚举。 有没有办法避免JaxB在单词之间添加下划线。
答案 0 :(得分:4)
您可以使用外部绑定文件来自定义枚举生成:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="schema.xsd">
<jxb:bindings node="//xs:simpleType[@name='MyEnum']/xs:restriction/xs:enumeration[@value='My_Simple_Text']">
<jxb:typesafeEnumMember name="FOO"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='MyEnum']/xs:restriction/xs:enumeration[@value='MySimple_Text']">
<jxb:typesafeEnumMember name="BAR"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
事实证明,更好的方法是使用以下绑定文件:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:globalBindings underscoreBinding="asCharInWord"/>
</jxb:bindings>