JAXB -XJC- 생성 된 Typeafe Enum 클래스 및 멤버에 영향을 미치는 영향
-
03-07-2019 - |
문제
XJC Compile (JAXB 패키지에서)으로 다음 단순 유형을 컴파일 할 때 ...
<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의 다음 열거로 끝납니다 (수입 명세서 및 의견이 제거됨)
@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()
방법. 이 방법이 호출 될 것으로 기대합니다 public String getValue()
Sun의 이름 지정 규칙에 따르면. 그렇게하면 EL을 사용하여 JSP-PAGE에서 쉽게 사용할 수 있습니다. 이제 나는 그 주위에 일을해야합니다.
누구든지 XJC 컴파일을보다 유용한 열거로 조정 한 경험이 있습니까? getValue()
방법, 대신 value()
방법? 아니면 메소드를 추가 할 수 있습니까?
추신 : 이것은 JAXB의 v2.0.3에서 발생했습니다. 최신 버전 v2.1.8을 다운로드했는데 거기에도 마찬가지입니다 ...
해결책
JAXB 사양에는이 변경을 허용하는 것으로 보이는 것이 없습니다. 이를 수행하는 유일한 방법은 JAXB 플러그인을 작성하는 것입니다.
다른 팁
이 메소드의 이름에 대해 생성 된 클래스와 다른 생성 클래스의 작은 변형을 만들 수 있습니다. 그런 다음 런타임에 생성 된 제품 대신 변형이로드되어 클래스 로더 게임을 재생해야합니다.
물론 이것은 원래 XSD가 자주 변경되지 않는 것입니다.
제휴하지 않습니다 StackOverflow