2013-09-04 3 views
4

나는이 XSD 조각 나타내는 자바 타입을 생성하기 위해 xjc를 실행할 때 :xjc를하고 XSD 선택

<xs:complexType name="fileUploadRequest"> 
    <xs:choice> 
     <xs:element name="path" type="xs:string"/> 
     <xs:element name="file" type="xs:base64Binary"/> 
    </xs:choice> 
    </xs:complexType> 

를 내가 선택 요소와 sequence을 지정했던 경우가 있었을 것이다 것과 흡사 클래스를 얻을 대신.

나는 지능이 조금있는 유형을 원한다. 그 선택은 한 번에 최대 하나의 선택 요소를 가질 수있다. 예를 들어 생성 된 setFile 메서드를 호출하면 경로가 null이되어야합니다. 코드 생성기의 명백한 요구 사항처럼 보이는 플러그인을 사용할 수 있습니까?

답변

5

binding.xml

당신은 당신이 찾고있는 속성의 유형을 생성하기 위해 다음과 같은 외부 바인딩 파일을 사용할 수 있습니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
      version="2.1"> 
    <globalBindings choiceContentProperty="true"/> 
</bindings> 

XJC 전화

바인딩 파일을 -b 플래그를 사용하여 참조됩니다. 속성 이제 다음과 같은 속성이 생성됩니다

생성

xjc -b binding.xml schema.xsd 

자세한 내용

@XmlElements({ 
    @XmlElement(name = "path", type = String.class), 
    @XmlElement(name = "file", type = byte[].class) 
}) 
protected Object pathOrFile; 

+0

대단히 감사합니다. PathOrFile의 유형을 검사하여 경로 대 파일을 구별한다고 상상해보십시오 (예 :'if (pathOrFile instanceof String)'). 권리? 선택 요소 중 일부 요소가 같은 유형의 경우 어떻게 작동합니까? – blueimpb

+1

@blueimpb - 요소가 같은 타입의 경우, 결과는 요소 정보를 보존하기 위해서 (때문에)'JAXBElement'로 랩됩니다. –