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.
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
Ich werde ein paar Kleinigkeiten hinzufügen.
.episode
-Dateien nur um normale Bindungsdateien (deshalb arbeiten sie mit xjc -b
).-episode
tut).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.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.
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.