2012-03-21 9 views
9

przypadek użycia:Insert zwyczaj adnotacji w java 'pola' za pomocą wtyczki annotate + JAXB (na xsd -> Java)

Wanna wstawić niestandardowe adnotacji do pól w klasie java generowanych przez JAXB

Problem:

Przy użyciu wtyczki Annotate + JAXB [1], mogę skutecznie wstawiać niestandardowe adnotacje, ale są one wstawiane w metodzie getter, a nie w polu. Adnotacje Morphia (mongo DB) (które faktycznie chcę wstawić) mogą jednak opisywać tylko pola java [2].

Moje testy xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1" 
xmlns:annox="http://annox.dev.java.net" jaxb:extensionBindingPrefixes="annox"> 

<xsd:element name="hoo" type="External" /> 
<xsd:complexType name="External"> 
    <xsd:sequence> 
     <xsd:element name="bar" type="xsd:string" /> 
     <xsd:element name="hoobar" type="xsd:string" /> 
    </xsd:sequence> 
</xsd:complexType> 
</xsd:schema> 

Moje testy xjb oprawa:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxb:bindings 
version="2.1" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 

    xmlns:annox="http://annox.dev.java.net" jaxb:extensionBindingPrefixes="annox"> 
    <jaxb:bindings schemaLocation="external.xsd" node="/xs:schema"> 

<jaxb:bindings node="xs:complexType[@name='External']/xs:sequence/xs:element[@name='bar']"> 
    <annox:annotate> 
    <annox:annotate 
     annox:class="java.lang.SuppressWarnings" 
     impl="com.acme.foo.MyFieldBridge"> 
    </annox:annotate> 
    </annox:annotate> 
</jaxb:bindings>  

Moja generowane java fragment:

@XmlElement(required = true) 
protected String bar; 
@XmlElement(required = true) 
protected String hoobar; 

/** 
* Gets the value of the bar property. 
* 
* @return 
*  possible object is 
*  {@link String } 
*  
*/ 
@SuppressWarnings({ 

}) 
public String getBar() { 
    return bar; 
} 

Jak widać, chcę opisać pole "pasek". Proszę doradź. W razie potrzeby zapytaj o więcej.

[1] Generate @Indexed annotation using Jaxb or HyperJaxb
[2] Dla próbki zobaczyć @Id adnotacji Morphia

+2

docelowa = "pole" rozwiązuje problem: Daj mi znać, jeśli masz jakieś inne rozwiązanie. Przepraszam za kłopot. – Hari

+2

Nie mogłem opublikować tego jako odpowiedź, ponieważ mam <100 reputacji. Dzięki za to, że tak się zaglądasz. – Hari

+0

Jak wstawiać komentarze do xsd podczas generowania schematu? – wener

Odpowiedz

7

Ok, zorientowaliśmy się samemu. Użyj opcji <annox:annotate target="field"> do adnotowania pola. Inne opcje to:

  • seter seter
  • parametr
  • getter
  • pole
  • klasa

Zobacz documentation.

+1

Dziękuję bardzo za odpowiedź leksykonu. – Hari

1

Jeszcze jedna rzecz: trzeba umieścić atrybut field do zewnętrznej <annox:annotate> tagu:

<annox:annotate target="field"> 
    <annox:annotate annox:class="java.lang.SuppressWarnings"/> 
</annox:annotate> 

Wprowadzenie go do tej samej zmiennej jako annox:class przypisują zamieszkuje może nie działać. Tak mi się stało.

Powiązane problemy