2011-07-01 2 views
4

나는 다음과 같은 바인딩 파일과 자바 코드를 생성하고 JAXB 2.2.4을 사용하여 :JAXB 생성 nillable로 = 사실

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<globalBindings generateElementProperty="false"> 

</globalBindings> 

불행하게도, 생성 된 코드는 진정한 = nillable로 주석이 있습니다. 내가 설정하지 않은 경우

<xsd:complexType name="CT_Beitrag"> 
    <xsd:complexContent> 
     <xsd:extension base="allgemein:CT_Objekt"> 
      <xsd:sequence> 
       <xsd:element name="ArtID" type="daten:STE_Beitrag" minOccurs="0" maxOccurs="1" nillable="true"/></xsd:element> 
      </xsd:sequence> 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 

<xsd:complexType name="STE_Beitrag" abstract="true"> 
    <xsd:simpleContent> 
    <xsd:extension base="xsd:string"/> 
    </xsd:simpleContent> 
</xsd:complexType> 

생성 된 CT_Beitrag 객체의 artid가 그 다음 Unmarshaller에이 생산 : 이것은 STEBeitrag의 정의는

@XmlElement(name = "ArtID", nillable = true) 
protected STEBeitrag artID; 

다음 예를 참조하십시오

<ns:ArtID xsi:nil="true"/> 
,691 같은 출력

요소 ArtID에 추상 유형이 있으므로이 XML 출력이 유효하지 않습니다.

은 어떻게 XMLELEMENT 주석의 nillable로 = TRUE를 생략 JAXB와 코드를 생성 할 수 있습니까? 그런데 스키마를 변경할 수 없습니다.

답변

0

는 당신이 요구하는지 무엇을하지 않는 방법과 무엇을 요구하는지하는 노력이 가치가 있는지 나는 놀랠 것입니다.

  1. 변경 스키마 (나는 당신이 할 수없는 것을 알고 있지만 당신이 그것을 변경할 수없는 경우, 아마 당신은 스키마의 로컬 복사본을 수행 할 수 있습니다

    내 마음에 뛰어 두 가지 옵션이 있습니다 이

  2. 변경 생성 된 코드) 컨트롤 외부의 서버에서 호스팅되기 때문에 ... 단순히 nillable=false 나는 해결책이 없다
1

nillable=true을 변경할 수 있지만,이 문제는 버그 에서 해결 10 이 문제가 해결되기를 바랍니다.