что такое .episode файл в JAXB..? Является ли это сгенерированным JAXB или это файл конфигурации, который мы будем манипулировать, чтобы избежать регенерации одних и тех же классов с помощью JAXB..?
Что такое файл .episode..?
Ответ 1
Примечание. Я EclipseLink JAXB (MOXy) ведет и член группы JAXB 2 (JSR-222).
Файл .episode генерируется компилятором XJC (XML Schema to Java). Это привязки схем, которые связывают типы схем с существующими классами. Это полезно, когда у вас есть одна XML-схема, которая импортируется другими схемами, поскольку она препятствует регенерации модели. Ниже приведен пример:
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>
Поскольку несколько XML-схем импортируют Product.xsd, мы можем использовать файлы эпизодов, чтобы классы, соответствующие Product.xsd, генерировались только один раз.
xjc -d out -episode product.episode Product.xsd
ProductPurchaseRequest.xsd
Ниже приведен пример XML-схемы, которая импортирует 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>
Когда мы генерируем классы из этой XML-схемы, мы будем ссылаться на файл эпизода, который мы создали, когда мы сгенерировали классы Java из Product.xsd.
xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode
ProductQuoteRequest.xsd
Ниже приведен еще один пример XML-схемы, которая импортирует 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>
Опять же, когда мы генерируем классы из этой XML-схемы, мы будем ссылаться на файл эпизода, который мы создали, когда мы сгенерировали классы Java из Product.xsd.
xjc -d out ProductQuoteRequest.xsd -extension -b product.episode
Дополнительная информация
Ответ 2
Я добавлю несколько мелочей.
- Фактически, файлы
.episode
- это просто обычные файлы привязки (почему они работают сxjc -b
). - Они могут быть сгенерированы с помощью специального встроенного плагина (что делает
-episode
). - Если помещено в JAR по пути
META-INF/sun-jaxb.episode
, вы можете сделатьxjc b.xsd a.jar
- XJC будет сканировать JAR для эпизодических файлов, а затем автоматически использовать файлы привязки. - Вся эта красота прекрасно работает с Maven (maven-jaxb2-plugin). Однако с более поздней версией вы можете использовать файлы привязки из артефактов JAR даже без эпизодов.
Ответ 3
По-видимому, они предназначены для создания модульной схемы.
Это означает, что сами файлы могут использоваться как в качестве конфигуратора, так и в качестве генеративного представления уровня данных для последующей обработки. Для определения того, о чем здесь говорится, потребуется больше контекста.
Ответ 4
Просто аддон к ответу, я хотел бы указать, как избежать создания файла .episode при использовании 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>
заставит его исчезнуть.