tập tin .episode trong JAXB .. là gì? Nó được tạo ra bởi JAXB hay nó là một tệp cấu hình mà chúng ta sẽ thao tác để tránh việc tái tạo các lớp giống nhau bởi JAXB ..?Tệp .episode là gì ..?
Trả lời
Lưu ý: Tôi là trưởng nhóm EclipseLink JAXB (MOXy) và là thành viên của nhóm chuyên gia JAXB 2 (JSR-222).
Tệp .episode được tạo bởi trình biên dịch XJC (XML Schema to Java). Nó là một ràng buộc lược đồ liên kết các kiểu lược đồ với các lớp hiện có. Nó rất hữu ích khi bạn có một lược đồ XML được nhập bởi các lược đồ khác vì nó ngăn cản mô hình được tái tạo. Dưới đây là một ví dụ:
Product.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/Product"
xmlns:tns="http://www.example.org/Product"
elementFormDefault="qualified">
<element name="product">
<complexType>
<sequence>
<element name="id" type="string"/>
<element name="name" type="string"/>
</sequence>
</complexType>
</element>
</schema>
Từ nhiều lược đồ XML nhập các Product.xsd chúng ta có thể tận dụng các file tập để các lớp học tương ứng với Product.xsd này chỉ được tạo một lần.
xjc -d out -episode product.episode Product.xsd
ProductPurchaseRequest.xsd
Dưới đây là một ví dụ về một lược đồ XML nhập khẩu Product.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/ProductPurchaseRequest"
xmlns:tns="http://www.example.org/ProductPurchaseRequest"
xmlns:prod="http://www.example.org/Product"
elementFormDefault="qualified">
<import namespace="http://www.example.org/Product" schemaLocation="Product.xsd"/>
<element name="purchase-request">
<complexType>
<sequence>
<element ref="prod:product" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
</schema>
Khi chúng ta tạo ra các lớp từ lược đồ XML này chúng ta sẽ tham khảo các tập phim tệp chúng tôi đã tạo khi tạo các lớp Java từ Product.xsd.
xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode
ProductQuoteRequest.xsd
Dưới đây là một ví dụ về một lược đồ XML nhập khẩu Product.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/ProductQuoteRequest"
xmlns:tns="http://www.example.org/ProductQuoteRequest"
xmlns:prod="http://www.example.org/Product"
elementFormDefault="qualified">
<import namespace="http://www.example.org/Product" schemaLocation="Product.xsd"/>
<element name="quote">
<complexType>
<sequence>
<element ref="prod:product"/>
</sequence>
</complexType>
</element>
</schema>
Một lần nữa khi chúng ta tạo ra các lớp từ lược đồ XML này chúng ta sẽ tham khảo các tập tệp chúng tôi đã tạo khi chúng tôi tạo các lớp Java từ Product.xsd.
xjc -d out ProductQuoteRequest.xsd -extension -b product.episode
Để biết thêm thông tin
Dường như, chúng dành cho modular schema creation.
Điều này ngụ ý rằng bản thân các tệp có thể được sử dụng làm bộ định cấu hình và dưới dạng chế độ xem tổng quát của lớp dữ liệu để xử lý hạ lưu. Thêm bối cảnh sẽ là cần thiết để xác định đó là được giới thiệu ở đây.
tôi sẽ thêm một số đố.
- Thực tế,
.episode
tệp chỉ là tệp ràng buộc bình thường (đó là lý do chúng hoạt động vớixjc -b
). - Chúng có thể được tạo bằng plugin tích hợp đặc biệt (đó là những gì
-episode
làm). - Nếu được đặt trong một JAR theo đường dẫn
META-INF/sun-jaxb.episode
, bạn có thể thực hiệnxjc b.xsd a.jar
- XJC sẽ quét các tệp JAR cho tệp tập sau đó sử dụng các tệp liên kết dưới dạng tự động. - Tất cả vẻ đẹp này hoạt động tốt với Maven (maven-jaxb2-plugin). Tuy nhiên, với phiên bản mới hơn, bạn có thể sử dụng các tệp ràng buộc từ các tạo phẩm JAR ngay cả khi không có các tập.
Chỉ cần một addon để câu trả lời, tôi xin cung cấp một đầu vào như thế nào để tránh việc tập .episode tạo ra trong khi sử dụng maven-jaxb2-plugin
`<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.12.3</version>
<executions>
<execution>
<id>schema-conversion</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaDirectory>src/main/schema/myschema</schemaDirectory>
<bindingDirectory>src/main/schema/myschema</bindingDirectory>
<bindingIncludes>
<include>binding_info.xjb</include>
</bindingIncludes>
<generateDirectory>src/main/java/</generateDirectory>
<episode>false</episode>
</configuration>
</execution>
</executions>
</plugin>`
<episode>false</episode>
sẽ làm cho nó biến mất .
Tính năng này không hoạt động đáng tin cậy với 'maven-jaxb2-plugin', mặc dù bạn có thể cung cấp tệp tập, bạn cũng phải cung cấp tệp lược đồ gốc. Trích dẫn từ hướng dẫn sử dụng plugin: Lưu ý rằng JAXB vẫn cần truy cập vào BOTH A và B schemas trong quá trình biên dịch. Bạn có thể sử dụng danh mục để cung cấp các vị trí thay thế của các lược đồ đã nhập. –