2014-10-24 16 views
7

kullanma JAXB/XJC JDK 1.7 (bin \ xjc.exe) İşteJAXB/XJC JAXBElement <String> ziyade üretir sadece dize (boş durumda idare)

benim XSD bir snipped oluyor sevk:

<xs:complexType name="NameType"> 
    <xs:sequence> 
     <xs:element name="Surname" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="Firstname" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="Middlename" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

sınıfı oluşturulan gösterir:

@XmlElementRef(name = "Surname", type = JAXBElement.class, required = false) 
protected JAXBElement<String> surname; 

public JAXBElement<String> getSurname() { 
    return surname; 
} 
public void setSurname(JAXBElement<String> value) { 
    this.surname = value; 
} 

JAXB boş sağlamak için JAXBElement kullanıyor anlıyorum ama bu bir dize null ayarlanabilir olarak şey ilan etmesinden bu yana hiçbir mantıklı.

Ve XSD'yi değiştirme seçeneğim yok, çünkü istemcim üretimde mevcut XSD'yi bırakmak istiyor.

Soru: oluşturmak için kod jeneratör değiştirebilir miyim:

@XmlElementRef(name = "Surname", type = String.class, required = false) 
protected String surname; 

public String getSurname() { 
    return surname; 
} 
public void setSurname(String value) { 
    this.surname = value; 
} 

Teşekkür Joel

cevap

3

kontrol sizin kod üreteci (XJC) argümanlar geçebilir. Aynı sorunu bir kez yaşadım ancak sorunu generateElementProperty yanlış ayarlayarak çözebiliyordum. Here's how i did it.

Bu kesinlikle jaxb kod üretecinde bazı seçeneklerdir ve kapatılabilmelidir.

EDIT: xjc.exe /?'a göre, bağlanma dosyasını -b parametresiyle spedize edebilirsiniz.

+0

teşekkür ederiz. Bu işe görünüyor. Başka sorunlar varsa cevap vereceğim. – joellucuik

+1

Yorumunuz için çok teşekkürler, bir çözüm bulmaya çalışmaktan birkaç gün sonra sorunu gerçekten çözdüm! – Dmitriy

8

XML öğesi hem yeniden doldurulabilir hem de isteğe bağlı olduğunda, varsayılan olarak JAXBElement oluşturulur.

<xs:element name="Surname" type="xs:string" nillable="true" minOccurs="0" maxOccurs="1"/> 

Bu XML aşağıdaki senaryoları oluşturmak için olanak sağlamaktır: özelliği null olduğunda

  1. eleman XML belgesine üzerinde olmamalıdır.
  2. Öğe, nil bayrağı ayarlandığında JAXBElement olduğunda, xsi:nil="true" değeriyle XML'de bulunmalıdır.

kurtulmak için JAXBElement Eğer answered by f1sh, olarak generateElementProperty seçeneğini kullanabilirsiniz ama o zaman iki senaryoyu ele almak mümkün olmayacaktır. Daha Fazla Bilgi

için

ilgili soruya cevabım bakınız: yardım F1sh için

+1

Yardım için teşekkürler Blaise. Siz efendim. – joellucuik

+0

@joellucuik - Her zaman bir TOP mezununa yardım etmek için iyi. –