web-dev-qa-db-fra.com

Qu'est-ce qu'un fichier .episode ..?

qu'est-ce qu'un fichier .episode dans JAXB ..? Est-il généré par le JAXB ou s'agit-il d'un fichier de configuration que nous manipulerions pour éviter la régénération des mêmes classes par JAXB ..?

30
quantumcrypt

Remarque: Je suis le EclipseLink JAXB (MOXy) lead et membre du JAXB 2 (JSR-222) groupe d'experts.

Un fichier .episode est généré par le compilateur XJC (XML Schema to Java). C'est une liaison de schéma qui associe des types de schéma à des classes existantes. Cela est utile lorsque vous avez un schéma XML importé par d'autres schémas, car cela empêche la régénération du modèle. Ci-dessous un exemple:

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>

Étant donné que plusieurs schémas XML importent Product.xsd, nous pouvons exploiter les fichiers d'épisodes de sorte que les classes correspondant à Product.xsd ne soient générées qu'une seule fois.

xjc -d out -episode product.episode Product.xsd

ProductPurchaseRequest.xsd

Vous trouverez ci-dessous un exemple de schéma XML qui importe 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>

Lorsque nous générons des classes à partir de ce schéma XML, nous référencerons le fichier d'épisode créé lors de la génération de classes Java à partir de Product.xsd.

xjc -d out ProductPurchaseRequest.xsd -extension -b product.episode

ProductQuoteRequest.xsd

Vous trouverez ci-dessous un autre exemple de schéma XML qui importe 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>

De nouveau, lorsque nous générons des classes à partir de ce schéma XML, nous référencerons le fichier d'épisode créé lors de la génération de classes Java à partir de Product.xsd.

xjc -d out ProductQuoteRequest.xsd -extension -b product.episode

Pour plus d'informations

29
Blaise Doughan

Je vais ajouter quelques anecdotes.

  • En fait, les fichiers .episode ne sont que des fichiers de liaison normaux (c’est pourquoi ils fonctionnent avec xjc -b).
  • Ils peuvent être générés avec un plugin intégré spécial (c'est ce que fait -episode).
  • Si vous le placez dans le fichier JAR sous le chemin META-INF/Sun-jaxb.episode, vous pouvez procéder à xjc b.xsd a.jar - XJC analysera les fichiers JAR des fichiers d'épisode, puis les utilisera automatiquement comme fichiers de liaison.
  • Toute cette beauté fonctionne bien avec Maven ( maven-jaxb2-plugin ). Cependant, avec les versions ultérieures, vous pouvez utiliser des fichiers de liaison d'artefacts JAR même sans épisodes.
7
lexicore

Juste un addon à la réponse, je voudrais fournir une entrée sur la façon d'éviter de générer un fichier .episode lors de l'utilisation de 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>le fera disparaître.

0
Suraj

Apparemment, ils sont pour création de schéma modulaire

Cela implique que les fichiers eux-mêmes peuvent être utilisés à la fois comme configurateur et comme vue générative d'une couche de données pour le traitement en aval. Il faudrait plus de contexte pour déterminer à quoi il est fait référence ici.

0
MrGomez