2012-03-21 48 views
9

使用案例:插入自定義註解中的java '場' 使用註釋插件+ JAXB(根據XSD - > JAVA)

想插入定製註釋由JAXB

問題產生在java類字段:

使用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; 
} 

正如你所看到的,我想註釋「欄」字段。請指教。如果需要,請求更多。

[1] Generate @Indexed annotation using Jaxb or HyperJaxb
[2]樣本見嗎啡

+2

目標= 「場」 解決了這個問題: 讓我知道你是否有其他解決方案。對不起,打擾了。 – Hari 2012-03-21 07:03:14

+2

我無法發佈這個答案,因爲我的聲望<100。感謝您對此進行調查。 – Hari 2012-03-21 07:04:00

+0

如何在生成模式時向xsd插入註釋? – wener 2015-10-27 11:50:33

回答

7

ok了@Id註釋,你想通了你自己。使用<annox:annotate target="field">來註釋一個字段。其他選項是:

  • 二傳手
  • setter方法的參數
  • 吸氣

documentation

+1

謝謝你的回覆lexicore。 – Hari 2012-03-21 10:20:40

1

還有一兩件事:你需要把field屬性外<annox:annotate>標籤:

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

它把相同的標籤爲annox:class屬性所在可能無法正常工作。那發生在我身上。