2012-01-02 35 views
7

Hi stackoverflow thế giới,thêm một chú thích để một lớp học ràng buộc JAXB từ một schema

tôi muốn chỉ định trong một XSD rằng một yếu tố cụ thể có thể được sử dụng như một XmlRootElement bởi JAXB.

Tôi biết cách thêm chú thích vào lớp được tạo: những gì tôi muốn làm là chỉ định rằng phần tử có thể được tạo dưới dạng phần tử gốc trước khi tạo mã.

Tôi sử dụng các tùy chỉnh JAXB bên ngoài (tệp .xjb). Mục đích là ở đây để không sửa đổi các lược đồ (vì chúng đang xác định các tiêu chuẩn).

Mọi người đều biết cách thực hiện điều đó? Cảm ơn!

NJ

+0

Vì vậy, bạn muốn thay đổi schema hay không (một số mâu thuẫn trong câu hỏi của bạn)? – home

+0

không, tôi muốn thêm tùy chỉnh bổ sung trong tệp .xjb. – njames

+0

có thể là sự khởi đầu của câu trả lời http://codereview.stackexchange.com/questions/1877/jaxb-xjc-code-generation-adding-xmlrootelement-and-joda-datetime – njames

Trả lời

15

Sự cố được giải quyết.

Plugin JAXB Chú thích http://confluence.highsource.org/display/J2B/Annotate+Plugin thực hiện công việc.

Thêm đoạn sau đây trong tập tin ràng buộc jaxb của bạn (ràng buộc, tức là một .xjb tập tin bên ngoài):

<jaxb:bindings schemaLocation="csw/2.0.2/CSW-discovery.xsd" node="/xs:schema"> 
    <jaxb:bindings node="xs:complexType[@name='GetRecordsType']"> 
    <annox:annotate> 
    <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" 
       name="GetRecordsType" /> 
</annox:annotate> 
    </jaxb:bindings> 
</jaxb:bindings> 

Đừng quên khai báo không gian tên:

<jaxb:bindings 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:annox="http://annox.dev.java.net" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
    jaxb:extensionBindingPrefixes="xjc annox" version="2.1"> 
... 
</jaxb:bindings> 

Và sử dụng một ANT hoặc nhiệm vụ MAVEN http://confluence.highsource.org/display/J2B/User+Guide để tiếp tục tạo nguồn.

Tôi vẫn tìm cách chỉ định thủ công (không có tác vụ xjc với kiến ​​hoặc maven) tiện ích mở rộng JAXB nhưng nó hoạt động ngay bây giờ. (Tôi có kịch bản ANT của riêng mình là lý do tại sao tôi tìm kiếm để gọi XJC theo cách thủ công).

Cơ chế mở rộng JAXB là rất thuận tiện, có một cái nhìn to Basics JAXB2: http://confluence.highsource.org/display/J2B/Home

+2

cách thêm chú thích như @something ({@ some ("a"), @ some ("b")})? – leet

+1

là điều này vẫn còn có liên quan? các liên kết không hoạt động: ( –

+0

Thật vậy confluence.highsource.org/... dường như không có sẵn nhưng bạn đã tìm kiếm trên Web? Ví dụ với ... google? ==> https://github.com/highsource/jaxb2-chú thích-plugin – njames

Các vấn đề liên quan