2012-04-05 2 views
2

이 스키마를 사용하여 myEnum 특성에 대해 열거 형 클래스를 생성하지 못하는 XJC 도구에 문제가 있습니다.바인딩 - JAXB : XJC 특성에 대해 열거 형 클래스를 생성하지 않습니다.

<xs:element name="myClass"> 
<xs:complexType> 
    <xs:attribute name="myEnum" > 
      <xs:simpleType > 
       <xs:restriction base="xs:string"> 
        <xs:maxLength value="1"/> 
        <xs:enumeration value="C"/> 
        <xs:enumeration value="M"/> 
        <xs:enumeration value="S"/> 
       </xs:restriction> 
      </xs:simpleType> 
    </xs:attribute> 
</xs:complexType> 
</xs:element> 

하지만에만이

<xs:simpleType > 
<xs:restriction base="xs:string"> 
    <xs:maxLength value="1"/> 
    <xs:enumeration value="C"/> 
    <xs:enumeration value="M"/> 
    <xs:enumeration value="S"/> 
</xs:restriction> 
</xs:simpleType> 
여기

외부 바인딩 파일 내용이다 사용하는 경우 그것을 생성

<?xml version="1.0" encoding="UTF-8" ?> 
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
    version="2.1" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    > 
<globalBindings typesafeEnumMemberName="generateName"> 

</globalBindings> 
</bindings> 

답변

2

당신이 시도 수를 : 그냥있는 작은 XSD 파일을 정의 그 특정 유형은 전역 유형으로 선언됩니다. 예 :

<xs:simpleType name="myEnumSimpleType"> 
    <xs:restriction base="xs:string"> 
     <xs:maxLength value="1"/> 
     <xs:enumeration value="C"/> 
     <xs:enumeration value="M"/> 
     <xs:enumeration value="S"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="myClass"> 
    <xs:complexType> 
     <xs:attribute name="myEnum" type="myEnumSimpleType"> 
    </xs:complexType> 
</xs:element> 

그러면 JAXB 클래스가 생성됩니다 ('인공 JAXB 클래스'라고합시다).

그러면 더 큰 XSD에서 xjc를 실행하고 생성을 사용자 정의하여 특정 요소에 대해이 유형을 사용할 수 있습니다.

이 외부 XSD의 JAXB 생성이 일회성 작업 인 경우 (예를 들어 JAXB 생성 코드를 SVN/Git에 넣으면) 코드의 해당 부분을 다시 쓸 수 있습니다 대신에 '인공적인'JAXB 유형.

당신이 시도 할 수있는 또 다른 당신의 바인딩 사용자 정의

<globalBindings typesafeEnumMemberName="generateName"> 

하지 글로벌 한, 그러나이 유형에 정확히 못하려고 표현을 사용하는 것입니다. JAXB는 비록 동일 할지라도 각각의 발생에 대해 새로운 클래스를 생성 할 것입니다.

xpath가 번거롭기 때문에이 큰 XSD의 로컬 복사본을 신속하게 테스트하고 네임 스페이스 (예 :

<xs:element name="myClass"> 
    <xs:complexType> 
    <xs:attribute name="myEnum" > 
     <xs:simpleType > 
       <xs:annotation> 
        <xs:appinfo> 
         <jaxb:typesafeEnumClass/> 
        </xs:appinfo> 
       </xs:annotation>    <xs:restriction base="xs:string"> 
       <xs:maxLength value="1"/> 
       <xs:enumeration value="C"/> 
       <xs:enumeration value="M"/> 
       <xs:enumeration value="S"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    </xs:complexType> 
</xs:element> 
+0

Thaank 당신이 당신의 대답하지만 문제는 내가 1500 개 이상의 라인 –

+0

를 가진 XSD 파일 (이미 존재하는)에 당신이 찾고있는 그러므로 당신이 XSD를 변경할 수 없다는 (되고 작동해야한다는 것입니다 XJC 전용 솔루션)? 그렇지 않은 경우 크기가 왜 중요한지 설명해주십시오. 또한, 특히 JDK 및 JAXB 버전 + 구현과 같은 특정 설치에 대한 세부 정보를 제공하는 것이 좋습니다. –

+1

예 XSD (다른 공급 업체의 XSD)를 변경할 수 없습니다. JDK 6과 JAXB 2.2를 사용하며 xsd 파일에서 자동으로 xml 파일 (임의의 데이터로 채워짐)을 생성하려고합니다. 고맙습니다 –

관련 문제