I use maven JaxB plugin to generate source from XSD.
The plugin details are as below,
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.8.3</version>
Enumerations defined in XSD has two values,
<simpleType name="MyEnum">
<restriction base="xsd:string">
<enumeration value="SimpleText" />
<enumeration value="ComplexText" />
</restriction>
</simpleType>
The generated code adds underscore between work boundaries of the enum values. For eg:, "SimpleText" comes as SIMPLE_TEXT in enum.
Generated code,
@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);
}
}
The problem occurs when an enumeration has same text separated with underscore at different places. For Eg;
<simpleType name="MyEnum">
<restriction base="xsd:string">
<enumeration value="My_Simple_Text" />
<enumeration value="MySimple_Text" />
</restriction>
</simpleType>
doesn't convert to an enum. Is there any way to avoid JaxB adding underscore between words.
You can use an external bindings file to customize the enum generation:
<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>
Turns out the better approach is to use the following bindings file instead:
<?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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With