jAXBの.episodeファイルとは何ですか。 JAXBによって生成されたのか、それともJAXBによる同じクラスの再生成を回避するために操作する構成ファイルなのか?
注:私は EclipseLink JAXB(MOXy) リードおよび JAXB 2(JSR-222) 専門家グループのメンバー。
.episodeファイルは、XJC(XML Schema to Java)コンパイラーによって生成されます。これは、スキーマタイプを既存のクラスに関連付けるスキーマバインディングです。モデルが再生成されないようにするため、他のスキーマによってインポートされる1つの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に対応するクラスが1回だけ生成されるようにすることができます。
xjc -d out -episode product.episode Product.xsd
ProductPurchaseRequest.xsd
以下は、Product.xsdをインポートするXMLスキーマの例です。
<?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スキーマからクラスを生成するとき、Product.xsdからJavaクラスを生成したときに作成したエピソードファイルを参照します。
xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode
ProductQuoteRequest.xsd
以下は、Product.xsdをインポートするXMLスキーマの別の例です。
<?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スキーマからクラスを生成するときも、Product.xsdからJavaクラスを生成したときに作成したエピソードファイルを参照します。
xjc -d out ProductQuoteRequest.xsd -extension -b product.episode
詳細情報
雑学クイズを追加します。
.episode
ファイルは通常のバインディングファイルです(そのため、xjc -b
で機能します)。-episode
の機能です)。META-INF/Sun-jaxb.episode
パスの下のJARに配置すると、xjc b.xsd a.jar
を実行できます。XJCはJARをスキャンしてエピソードファイルを探し、バインディングファイルとして自動的に使用します。答えのアドオンですが、maven-jaxb2-pluginの使用中に.episodeファイルが生成されないようにする方法について入力を提供します
`<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>
は非表示にします。
どうやら、それらは モジュラースキーマの作成 用です。
これは、ファイル自体がコンフィギュレーターとしても、ダウンストリーム処理のデータレイヤーの生成ビューとしても使用できることを意味します。ここでどちらが参照されているかを判断するには、より多くのコンテキストが必要です。