Tôi đang làm việc trên một ứng dụng sử dụng XJC để tạo các POJO Java từ XSD. Có hàng chục lược đồ, và con số đó sẽ tăng lên. Ứng dụng cũng cần có khả năng xử lý các phiên bản khác nhau của cùng một lược đồ, có nghĩa là tôi sẽ có nhiều lược đồ xác định các loại phổ biến. Tôi đang cố gắng tùy chỉnh các ràng buộc để các loại lõi nhất định thực hiện một giao diện chung. Plugin Inheritance của JAXB2 Basics dường như làm những gì tôi cần, nhưng dường như tôi không thể làm đúng cú pháp.JAXB đã tạo các lớp một số loại thực hiện một giao diện tùy chỉnh
Dưới đây là phần có liên quan của giản đồ của tôi:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="http://example.com/core"
targetNamespace="http://example.com/core"
xmlns:xml="http://www.w3.org/XML/1998/namespace">
...
<xs:complexType name="addressType">
<xs:sequence>
<xs:element name="Address" type="xs:string"/>
<xs:element name="City" type="xs:string"/>
<xs:element name="Province" type="xs:string"/>
<xs:element name="Country" type="xs:string"/>
<xs:element name="County" type="xs:string" minOccurs="0"/>
<xs:element name="PostalCode" type="xs:string"/>
</xs:sequence>
</xs:complexType>
...
</xs:schema>
... và đây là những gì tùy chỉnh của tôi tập ràng buộc trông giống như:
<?xml version="1.0"?>
<jaxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
xmlns:my="http://example.com/core"
jaxb:extensionBindingPrefixes="inheritance"
version="2.1">
<jaxb:bindings scd="x-schema::my" xmlns:my="http://example.com/core">
<jaxb:globalBindings localScoping="toplevel">
<jaxb:serializable/>
<xjc:simple/>
</jaxb:globalBindings>
<jaxb:bindings scd="/type::my:addressType">
<inheritance:implements>com.mysite.validator.ValidatableAddress</inheritance:implements>
<!--<xjc:superInterface name="com.mysite.validator.ValidatableAddress"/>-->
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Tôi đang sử dụng cách tiếp cậnSCD , bởi vì trong tất cả các ví dụ ràng buộc "truyền thống" chỉ ra cách sử dụng plugin kế thừa, lược đồ vị trí được chỉ định. Tôi muốn tránh phải chỉ định schemaLocation vì số lượng lớn (và ngày càng tăng) của các lược đồ. Tôi không muốn phải thay đổi tệp ràng buộc mỗi lần chúng tôi thêm lược đồ mới. Vì vậy, scd có vẻ như nó sẽ đáp ứng yêu cầu này.
Tuy nhiên khi tôi chạy xây dựng bằng cách sử dụng trên ràng buộc, tôi có được điều này:
[xjc] [ERROR] cvc-elt.1: Cannot find the declaration of element 'inheritance:implements'. [xjc] line 18 of file:/dev/workspace/my_app/etc/schemas/bindings-common.xml [xjc] failure in the XJC task. Use the Ant -verbose switch for more details [xjc] classLoader = [email protected] [xjc] SharedSecrets.getJavaNetAccess()[email protected]
Nếu tôi nhận xét ra thừa kế: thực hiện dòng và bỏ XJC: superInterface dòng, sai đi và quá trình xây dựng hoàn tất thành công, nhưng các lớp AddressType của tôi không triển khai loại ValidatableAddress.
Plugin kế thừa có thể được sử dụng với scd không? Có thể xjc: superInterface được giới hạn chỉ một số yếu tố?
Chúc mừng.
Cảm ơn từ vựng. Điều gì về việc kết hợp scd và xjc: superInterface ... Điều đó có hiệu quả không? Bất kỳ ý tưởng nào tại sao phương pháp này không tạo ra lỗi nào, nhưng cũng dường như không có bất kỳ ảnh hưởng nào đối với nguồn được tạo ra? – 6006604
... hoặc là xjc: superInterface được coi là tùy chỉnh/nhà cung cấp tùy chỉnh giống như kế thừa: triển khai? – 6006604
Nó thực sự là một phần mở rộng nhà cung cấp nhưng nó là một phần mở rộng nhà cung cấp "hạng nhất" được đặc biệt biết đến XJC (xem [ở đây] (https://github.com/gf-metro/jaxb/blob/69471fb27af6a9e990ef2a7873aab64a18e87640/jaxb-ri/ xjc/src/main/resources/com/sun/công cụ/xjc/reader/xmlschema/bindinfo/binding.xsd # L81)) - không giống như 'inheritance: implements'. Nhân tiện, không phải là 'xjc: superInterface' cho [global bindings only] (https://jaxb.java.net/nonav/2.1.15/docs/vendorCustomizations.html#superinterface)? Sẽ giải thích lý do tại sao nó bị bỏ qua trên lớp. – lexicore