2012-03-21 21 views
9

Sử dụng trường hợp:Chèn chú thích tùy chỉnh trong 'trường' java sử dụng plugin chú thích + JAXB (khi xsd -> java)

Wanna chèn chú thích tùy chỉnh cho các trường trong lớp java tạo ra bởi JAXB

Vấn đề:

Sử dụng plugin Chú thích + JAXB [1], tôi có thể chèn chú thích tùy chỉnh thành công nhưng chúng được chèn vào phương thức getter thay vì trường. Morphia (mongo DB) chú thích (mà tôi thực sự muốn chèn) tuy nhiên chỉ có thể chú thích các trường java [2].

xsd thử nghiệm của tôi:

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

thử nghiệm của tôi xjb ràng buộc:

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

tạo đoạn mã java của tôi:

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

Như bạn thấy, tôi muốn chú giải trường "thanh". Xin cho biết. Yêu cầu thêm nếu cần.

[1] Generate @Indexed annotation using Jaxb or HyperJaxb
[2] Đối với mẫu thấy chú thích @ id của nha phiến

+2

target = "lĩnh vực" giải quyết vấn đề: Hãy cho tôi biết nếu bạn có bất kỳ giải pháp nào khác. Xin lôi vi đa lam phiên. – Hari

+2

Tôi không thể đăng câu trả lời này vì tôi có <100 danh tiếng. Cảm ơn vì đã xem xét điều này. – Hari

+0

Làm cách nào để chèn nhận xét vào xsd khi tạo lược đồ? – wener

Trả lời

7

Ok, bạn figured it out bản thân. Sử dụng <annox:annotate target="field"> để chú thích một trường. Các tùy chọn khác bao gồm:

  • setter
  • setter tham số
  • getter
  • lĩnh vực
  • lớp

Xem documentation.

+1

Cảm ơn nhiều vì đã trả lời của bạn. – Hari

1

Chỉ cần một điều nữa: bạn cần phải đặt thuộc tính field đến ngoài <annox:annotate> tag:

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

Đưa vào thẻ tương tự như thuộc tính annox:class cư trú có thể không hoạt động. Điều đó làm tôi vui.