문제

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가 자주 변경되지 않는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top