2012-02-15 18 views
6

JAXB 2.1 XJC'yi kullanarak xsd'den java kodu oluşturmak istiyorum. Sağlanan bir xsd şeması var ve değiştiremiyorum. Xml şemasından java sınıfları oluştururken xjc: basit modunu kullanmak istiyorum. Burada belirtildiği üzereJAXB 2.1 - xs'yi özelleştir: herhangi bir ciltleme

<xs:any namespace="##other" processContents="lax"/> 

: http://jaxb.java.net/guide/Mapping_of__xs_any___.html Ben bu unsurlar arasında ki geçişi edilmesi beklenmektedir:

xsd olarak orada unsurlardır

@XmlAnyElement(lax=true) 
public Object any; 

ama basit bağlama modunu kullandığınızda XJC: basit Ben:

@XmlAnyElement 
protected Element any; 

Bir geçici çözüm bulmaya çalışıyordum, ama her yerde xs dediler: herhangi bir yapılandırma yapılmadı. Xs sahip olmanın tek yolu: java.lang.Object öğesinin herhangi bir öğesi xjc: basit veya processContents öğesini xsd içinde "sıkı" olarak değiştirmektir. Xml şemasını değiştiremediğim için bu seçeneklerin hiçbiri şu anda kabul edilemez ve xjc: basit mod ile oluşturulmuş java sınıflarına bağlı olan eski bir kodum var ama şimdi xs kullanmam gerekiyor: herhangi bir eleman ve org.w3c.dom.Element nesnelerini kullanmaktan kaçının.

Herhangi bir yardım çok takdir edilecektir. Teşekkürler.

cevap

5

Wildcard plugin numarasını JAXB2 Basics'dan kullanabilirsiniz. Bunun için şemayı değiştirmek gerekmez

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:wildcard="http://jaxb2-commons.dev.java.net/basic/wildcard" 
    jaxb:version="2.1" 
    jaxb:extensionBindingPrefixes="wildcard"> 

... 

    <xs:complexType name="issueJIIB10Type" mixed="true"> 
     <xs:annotation> 
      <xs:appinfo> 
       <wildcard:lax/> 
      </xs:appinfo> 
     </xs:annotation> 
     <xs:complexContent mixed="true"> 
      <xs:extension base="xs:anyType"/> 
     </xs:complexContent> 
    </xs:complexType> 

... 

</xs:schema> 

, dosyaları bağlama yoluyla bu özelleştirmeyi kullanabilirsiniz: Bu sıkı joker bağlayıcı modları/gevşek özelleştirmek/atlamak için izin verir.

+0

Bu eklentiyi okudum bile, ancak bu doğru yön olup olmadığından emin değildi. Cevabınız için teşekkürler - Projede boş zamanım kaldığı anda bunu doğrulayacağım. – arek

+1

Teşekkürler lexicore, bu eklenti neredeyse ihtiyacım olan şey. Neredeyse dedim çünkü tüm xleri global olarak değiştirmek için bir yol bulamadım: java.lang.Object. Her durum ayrı ayrı yapılandırılmalıdır, ne biraz can sıkıcıdır. Sadece bağlayıcı dosya aracılığıyla yapılandırmak için gerekebilecek herkes için kayıt için (eklenti doc bu durumu hiç de kapsamaz), doğrudan karmaşık türünü göstermeniz gerekir, örneğin: arek

+0

@Arek Lütfen JAXB2 Temelleri'nde bir sorun yapın, bu yapılabilir. – lexicore