2009-10-30 23 views
37

Şu anda çoğu türde ve öğe üzerinde <xsd:annotation>/<xsd:documentation> olan bir XML Şeması ile çalışıyorum. Bu XML Şeması'ndan Java Fasülyesi ürettiğimde, o Fasulye'lerin Javadoc'u yalnızca tür/öğenin izin verilen içeriği hakkında genel olarak oluşturulmuş bazı bilgiler içerir.Oluşturulan sınıflar, XML şema dokümantasyonundan Javadoc'u içerir

İlgili yerlerde <xsd:documentation> etiketinin içeriğini görmek istiyorum (örneğin, bir complextType için bu etiketin içeriği, söz konusu karmaşıkType'ı temsil etmek için oluşturulan sınıfın Javadoc'unda görünmelidir).

Bunu başarmanın bir yolu var mı?

Düzenle: Bu XML Şeması, JAX-WS ile bir WSDL'de kullanılacak, bu nedenle bu etiket de uygun olabilir.

Edit 2: <jxb:javadoc> hakkında okudum. Anladığım kadarıyla ya ayrı bir JAXB bağlama dosyasında ya da doğrudan XML Şeması'nda belirtilebilir. Bu benim problemimi neredeyse çözerdi. Ancak Javadoc, belgelerin birincil hedefi olmadığından (mevcut veri yapısıyla ilgili veri yapısından ve bunlardan oluşturulan Java Bean'lerinden değil) ve JAXB olmayan araçların bilgilere erişmesine izin verdiğinden mevcut <xsd:documentation> etiketini kullanmayı tercih ederim. de. Hem <jxb:javadoc> hem de xsd:documentation> belgesindeki belgelerin sağlanması "yanlış", çünkü veriyi (ve işin) iyi bir sebepten dolayı kopyaladığımdan dolayı.

Düzenleme 3: Ben zaten yarım bir çözüm olduğunu fark Pascal tarafından cevap sayesinde: complexType s <xsd:documentation> onun Javadoc başında yazılır! Sorun hala sadececomplexType s kullanıldı ve simpleType s (ayrıca bir sınıfa neden olabilir) ve öğeler hala Javadoc-less.

+0

bir seçenek kullanıyor mu? –

+1

@Pascal: Teşekkürler, ben bu soruya cevap verdim. –

cevap

31

dışında ve yalnızca bir Karmaşık Tip ise, normal xsd:documentation java kaynağına yerleştirilemedi. Öğeler, basit tipler, vb. Için belgeler göz ardı edilir.

jxb:javadoc kullanarak sonlandırıyorum. Bunu yapmak için <xsd:schema> öğenize xmlns:jxb="http://java.sun.com/xml/ns/jaxb" tanımını ekleyin.

<xsd:complexType> veya <xsd: element> veya <xsd:attribute> bir çocuk ekleyin:

<xsd:annotation><xsd:appinfo><jxb:XXX><jxb:javadoc> 
    This is my comment for a class/property 
</jxb:javadoc></jxb:XXX></xsd:appinfo></xsd:annotation> 

XXX "sınıfı" veya "mülk" ya olduğunu. Eğer xsd:schema için bir çocuk yazmak bir paket için

<xsd:annotation><xsd:appinfo><jxb:schemaBindings><jxb:package name="com.acme"><jxb:javadoc> 
    This is my comment for a package 
</jxb:javadoc></jxb:package></jxb:schemaBindings></xsd:appinfo></xsd:annotation> 

Yazma HTML belgesi <![CDATA[ --- ]]>

(EDIT'e parantez içi gerektirir: benim cevap yazarken, soru yüzden ben OP tarafından düzenlendi Buna uygun olarak güncelleme)

Benim durumumda javadoc tek hedefti, bu yüzden jxb:javadoc kullanmak kabul edildi. Ama güncellemeniz mükemmel bir anlam ifade ediyor ve aslında tamamen size katılıyorum.Ne yazık ki, tanımladığınız durum için ideal bir çözüm bulamadım (bu yüzden bu soruyu çok dikkatli bir şekilde takip edeceğim). Belki xsd:documentation belgelere üretmek için xframe gibi bir şey kullanabilirsiniz, ancak bu soruya cevap vermez.

+0

Hm, (en azından) complexType’ın Javadoc’u aldığını fark etmedim. Sevdiğim şeye yakın küçük bir adım ama yine de mükemmel değil. –

+0

http://glassfish.10926.n7.nabble.com/newbe-how-can-I-generate-javadoc-from-the-schema-documentation-td59525.html –

10

Bu sadece JAXB referans uygulaması ile mümkün değildir. Bir XJC eklentisi yazmaya çalışmış olsanız bile, eklenti API'sının Şema tanımına bir gönderme yapılmadığını göreceksiniz, bu nedenle bu bilgileri çıkarmanın bir yolu yok.

Tek umudumuz JAXB gelecekteki bir sürümü durumu düzeltir olmasıdır. open feature request here var.

+0

bağlantı giriş yapılmasını gerektirir. ':-(' –

2

aşağıdaki teknikler (XML şemaları oluşturulan) Java eleman sınıflara javadoc başlıklarını ekleyerek oldukça işe bulabilirsiniz. JavaDoc'u, jax-b ad alanında tanımlanan, xml şeması notu ve appinfo etiketlerinde yer alan etiketlere yerleştiriyorum. Jaxb ad alanının dokümantasyon türlerini tanımladığını unutmayın; Ben iki tane kullanıyorum: sınıf ve özellik etiketleri. Aşağıdaki ad alanında tanımlı: xmlns: jxb = "http://java.sun.com/xml/ns/jaxb"

1) Bir belgeyi belgelemek için aşağıdaki dizide jaxb "class" etiketi kullanıyorum :

 <xs:attribute name="name" type="xs:NCName" use="required"> 
      <xs:annotation> 
      <xs:appinfo> 
       <jxb:property> 
        <jxb:javadoc> 
         &lt;p&gt;Documentation goes here.&lt;/p&gt; 
        </jxb:javadoc> 
       </jxb:property> 
      </xs:appinfo> 
      </xs:annotation> 
     </xs:attribute> 
:

 <xs:element name="description" type="rep:NamedString"> 
      <xs:annotation> 
      <xs:appinfo> 
       <jxb:property> 
        <jxb:javadoc> 
         &lt;p&gt;Documentation goes here.&lt;/p&gt; 
        </jxb:javadoc> 
       </jxb:property> 
      </xs:appinfo> 
      </xs:annotation> 
     </xs:element> 

3) Ben özelliklerini belgelemek için etiketleri aynı seti kullanın:

<xs:complexType name="Structure"> 
    <xs:annotation> 
     <xs:appinfo> 
      <jxb:class> 
       <jxb:javadoc> 
       Documentation text goes here. Since parsing the schema 
       into Java involves evaluating the xml, I escape all 
       the tags I use as follows &lt;p&gt; for <p>. 
       </jxb:javadoc> 
      </jxb:class> 
     </xs:appinfo> 
    </xs:annotation> 

    . 
    . 
    . 
    </xs:complexType> 

2) aşağıdaki gibi ben "özelliği" etiketini kullanan, bir öğe belgelemek için

4) Bir seçimi belgelemek için, özellik jaxb etiketini kullanırım ve seçimi belgeleyim. Bu etiket beri başarısız olur burada bireysel seçimler belgelemek için çalışılıyor

<xs:choice maxOccurs="unbounded"> 
      <xs:annotation> 
      <xs:appinfo> 
       <jxb:property> 
        <jxb:javadoc> 
         &lt;p&gt;Documentation goes here.&lt;/p&gt; 
        </jxb:javadoc> 
       </jxb:property> 
      </xs:appinfo> 
      </xs:annotation> 

      <xs:element name="value" type="rep:NamedValue" /> 
      <xs:element name="list" type="rep:NamedList" /> 
      <xs:element name="structure" type="rep:NamedStructure" /> 
     </xs:choice> 

Türlenmemiş listesini üretir.

İlgili konular