2012-05-24 25 views
6

Tôi đang cố tạo các lớp Java từ một số XSD cụ thể với xjc. Những lược đồ này có một số định nghĩa chung, vì vậy chúng nhập một số XSD phổ biến. Đặc biệt, chúng có thể bao gồm từ số không đến tất cả các XSD chung.Xác định tên gói cho XSD chung với xjc và các ràng buộc

Tôi muốn tạo tất cả các lớp từ một XSD cụ thể cho một gói cụ thể, nhưng giữ các lớp được tạo cho các lược đồ chung trong một gói chung, vì vậy chúng không được lặp lại cho từng lược đồ cụ thể trong cây nguồn .

Tôi đã học được rằng bindings tùy chỉnh có thể được dùng để xác định các gói trên một cơ sở cho mỗi lược đồ, với ví dụ:

<jxb:bindings schemaLocation="common1.xsd" node="/xsd:schema"> 
    <jxb:schemaBindings> 
     <jxb:package name="mypackage.commonclasses"/> 
    </jxb:schemaBindings> 
</jxb:bindings> 

Tôi đã có cơ cấu như sau:

schemas 
| - common 
| | - common1.xsd --> XSD with common types #1 
| | - ... 
| | - commonN.xsd --> XSD with common types #N 
| | - commonBindings.xjb --> Defines package "mypackage.commons" for common*.xsd 
| - specific1 
| | - specific1.xsd --> Includes ../common/common{1-N}.xsd 
| | - specific1.xjb --> Defines package "mypackage.specific1" for specific1.xsd 
| - specificN 
| | - specificN.xsd --> Includes only ../common/common1.xsd 
| | - specificN.xjb --> Defines package "mypackage.specificN" for specificN.xsd 

Tất cả hoạt động tốt với:

xjc -b schemas/specific1 
    -b schemas/common 
    schemas/specific1/specific1.xsd 

Tạo lớp học cho specific1.xsd trong mypackage.specific1 và các lớp học phổ biến trong mypackage.commons. Nhưng khi tôi cố gắng để tạo ra các lớp dành cho specificN, xjc ném các lỗi sau:

[ERROR] "file:/drive/dir/schemas/common/common1.xsd" is not a part of 
this compilation. Is this a mistake for "/drive/dir/schemas/common/commonBindings.xjb"? 
    line 2 of file:/drive/dir/schemas/common/commonBindings.xjb 

tôi nhận được lỗi này lặp lại cho mỗi XSD chung không được nhập vào bất cứ xsd cụ thể.

Có cách nào tôi có thể thực hiện xjc bỏ qua các ràng buộc trong commonBindings.xjb không được sử dụng trong XSD mà tôi đang tạo các lớp không?

Hoặc, tôi đang hướng sai hướng bằng cách sử dụng cách tiếp cận này, và phải là, ví dụ, sử dụng chú thích trong xsd cụ thể? Tôi muốn tránh sửa đổi các lược đồ nếu có thể.

Trả lời

3

Tôi nghĩ rằng những gì bạn cần là sử dụng tập JAXB. Xem this SO post, hãy xem câu trả lời @BlaiseDoughan được cung cấp. Trong trường hợp của bạn, hãy chạy xjc trước tiên, sử dụng tệp ràng buộc tùy chỉnh của bạn để tùy chỉnh tên gói, chống lại tất cả các XSD phổ biến, để tạo tệp tập và các lớp Java thông thường của bạn.

Sau đó, sử dụng xjc lần nữa, với các XSD khác bạn muốn, bằng cách tham chiếu tệp tập từ lần chạy đầu tiên.

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