web-dev-qa-db-ger.com

Was ist eine .episode-Datei?

was ist eine .episode-Datei in JAXB ..? Wird es von JAXB generiert oder ist es eine Konfigurationsdatei, die wir manipulieren würden, um zu verhindern, dass JAXB dieselben Klassen neu generiert.

30
quantumcrypt

Hinweis: Ich bin der EclipseLink JAXB (MOXy) Lead und Mitglied der JAXB 2 (JSR-222) Expertengruppe.

Eine Episodendatei wird vom XJC-Compiler (XML Schema to Java) generiert. Hierbei handelt es sich um eine Schema-Bindung, die Schematypen mit vorhandenen Klassen verknüpft. Dies ist nützlich, wenn Sie über ein XML-Schema verfügen, das von anderen Schemas importiert wird, da dies verhindert, dass das Modell erneut generiert wird. Unten ist ein Beispiel:

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>

Da mehrere XML-Schemas Product.xsd importieren, können Episodendateien verwendet werden, sodass die Klassen, die Product.xsd entsprechen, nur einmal generiert werden.

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

ProductPurchaseRequest.xsd

Unten sehen Sie ein Beispiel für ein XML-Schema, das Product.xsd importiert:

<?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>

Wenn wir Klassen aus diesem XML-Schema generieren, referenzieren wir die Episodendatei, die wir erstellt haben, als wir Java-Klassen aus Product.xsd generiert haben.

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

ProductQuoteRequest.xsd

Nachfolgend finden Sie ein weiteres Beispiel für ein XML-Schema, das Product.xsd importiert:

<?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>

Wenn wir wieder Klassen aus diesem XML-Schema generieren, referenzieren wir die Episodendatei, die wir erstellt haben, als wir Java-Klassen aus Product.xsd generierten.

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

Weitere Informationen

29
Blaise Doughan

Ich werde ein paar Kleinigkeiten hinzufügen.

  • Tatsächlich handelt es sich bei .episode-Dateien nur um normale Bindungsdateien (deshalb arbeiten sie mit xjc -b).
  • Sie können mit einem speziellen integrierten Plugin generiert werden (das ist, was -episode tut).
  • Wenn Sie sich unter dem META-INF/Sun-jaxb.episode-Pfad in einer JAR-Datei befinden, können Sie xjc b.xsd a.jar tun. XJC durchsucht JARs nach Episodendateien und verwendet diese dann automatisch als Bindungsdateien.
  • All diese Schönheit funktioniert gut mit Maven ( Maven-Jaxb2-Plugin ). Mit einer späteren Version können Sie jedoch Bindungsdateien aus JAR-Artefakten auch ohne Episoden verwenden.
7
lexicore

Nur ein Addon zur Antwort. Ich möchte gerne einen Beitrag dazu geben, wie Sie vermeiden können, dass eine .episode-Datei während der Verwendung von maven-jaxb2-plugin generiert wird

         `<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>verschwindet.

0
Suraj

Anscheinend sind sie für modulare Schemaerstellung

Dies bedeutet, dass die Dateien selbst sowohl als Konfigurator als auch als generative Sicht auf eine Datenschicht für die Downstream-Verarbeitung verwendet werden können. Um herauszufinden, worauf hier Bezug genommen wird, wäre mehr Kontext erforderlich.

0
MrGomez