2012-03-21 4 views
9

Используйте случай:Вставка пользовательских аннотаций в поле «» Java с использованием аннотировать плагин + JAXB (при XSD -> Java)

Хотите вставить пользовательские аннотации к полям в классе Java, порожденных JAXB

Проблема:

Использование плагина Annotate + JAXB [1], я могу успешно вставлять пользовательские аннотации, но они вставляются в метод getter, а не в поле. Аннотации Morphia (mongo DB) (которые я действительно хочу вставить), однако могут аннотировать только java-поля [2].

Мой тест 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> 

Мой тест связывания xjb:

<?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>  

Мой генерироваться Java сниппет:

@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; 
} 

Как вы можете видеть, я хочу аннотировать поле «bar». Пожалуйста, порекомендуйте. При необходимости попросите больше.

[1] Generate @Indexed annotation using Jaxb or HyperJaxb
[2] Для образца см @Id аннотации морфия

+2

мишень = решает проблему: Дайте мне знать, если у вас есть другое решение. Извините за беспокойство. – Hari

+2

Я не мог опубликовать это как ответ, так как у меня есть репутация <100. Спасибо, что посмотрели на это в любом случае. – Hari

+0

Как я могу вставлять комментарии в xsd при генерации схемы? – wener

ответ

7

Хорошо, вы поняли это сам. Используйте <annox:annotate target="field">, чтобы аннотировать поле. Другие варианты:

  • сеттер
  • сеттер-параметр
  • геттер
  • поле
  • класс

См documentation.

+1

Большое спасибо за ваш ответ lexicore. – Hari

1

Просто еще одна вещь: вам нужно поставить атрибут field к внешнему <annox:annotate> тегу:

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

Ввод его в тот же тег, как annox:class атрибут постоянно находится может не работать. Это случилось со мной. "Поле"