【发布时间】:2008-10-20 11:10:12
【问题描述】:
使用 XJC 编译器(来自 JAXB 包)编译以下 simpleType 时...
<xs:simpleType name="test">
<xs:annotation>
<xs:appinfo>
<jaxb:typesafeEnumClass/>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="4">
<xs:annotation>
<xs:appinfo>
<jaxb:typesafeEnumMember name="FOUR"/>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="6">
<xs:annotation>
<xs:appinfo>
<jaxb:typesafeEnumMember name="SIX"/>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
我最终在 Java 中得到以下枚举(删除了导入语句和 cmets)
@XmlEnum
public enum Test {
@XmlEnumValue("4")
FOUR("4"),
@XmlEnumValue("6")
SIX("6");
private final String value;
Test(String v) {
value = v;
}
public String value() {
return value;
}
public static Test fromValue(String v) {
for (Test c: Test.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v.toString());
}
}
这正是我想要的……除了public String value() 方法。根据 Sun 的命名约定,我希望该方法被称为 public String getValue()。这样我就可以轻松地在使用 EL 的 JSP 页面中使用它。现在我必须解决它。
在使用getValue() 方法而不是value() 方法将XJC 编译进一步调整为更有用的枚举方面,是否有人有任何经验?或者我可以添加一个方法之类的吗?
附:这发生在 JAXB v2.0.3 中。我下载了最新的v2.1.8版本,和那里一样……
【问题讨论】:
标签: xsd enums jaxb type-safety xjc