web-dev-qa-db-ja.com

.episodeファイルとは何ですか?

jAXBの.episodeファイルとは何ですか。 JAXBによって生成されたのか、それともJAXBによる同じクラスの再生成を回避するために操作する構成ファイルなのか?

34
quantumcrypt

注:私は 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

詳細情報

32
bdoughan

雑学クイズを追加します。

  • 実際、.episodeファイルは通常のバインディングファイルです(そのため、xjc -bで機能します)。
  • これらは、特別な組み込みプラグインで生成できます(これが-episodeの機能です)。
  • META-INF/Sun-jaxb.episodeパスの下のJARに配置すると、xjc b.xsd a.jarを実行できます。XJCはJARをスキャンしてエピソードファイルを探し、バインディングファイルとして自動的に使用します。
  • このすべての美しさはMaven( maven-jaxb2-plugin )でうまく機能します。ただし、新しいバージョンでは、エピソードがなくてもJARアーティファクトのバインディングファイルを使用できます。
8
lexicore

答えのアドオンですが、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>は非表示にします。

0

どうやら、それらは モジュラースキーマの作成 用です。

これは、ファイル自体がコンフィギュレーターとしても、ダウンストリーム処理のデータレイヤーの生成ビューとしても使用できることを意味します。ここでどちらが参照されているかを判断するには、より多くのコンテキストが必要です。

0
MrGomez