2012-03-18 9 views
26

cos'è un file .episode in JAXB ..? Viene generato da JAXB o è un file di configurazione che manipoliamo per evitare la rigenerazione delle stesse classi da parte di JAXB ..?Che cos'è un file .episode ..?

risposta

26

Nota: Sono il lead EclipseLink JAXB (MOXy) e un membro del gruppo di esperti JAXB 2 (JSR-222).

Un file .episode viene generato dal compilatore XJC (XML Schema to Java). È un collegamento di schemi che associa i tipi di schema alle classi esistenti. È utile quando si ha uno schema XML che viene importato da altri schemi poiché impedisce la rigenerazione del modello. Di seguito è riportato un esempio:

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> 

Poiché più schemi XML di importazione Product.xsd possiamo sfruttare i file episodio in modo che le classi corrispondenti alle Product.xsd vengono generate solo una volta.

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

ProductPurchaseRequest.xsd

Di seguito è un esempio di uno schema XML che importa 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> 

Quando abbiamo generare le classi da questo schema XML si farà riferimento l'episodio file che abbiamo creato quando abbiamo generato classi Java da Product.xsd.

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

ProductQuoteRequest.xsd

Qui di seguito è un altro esempio di uno schema XML che importa 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> 

Anche in questo caso, quando si generano le classi di questo schema XML si farà riferimento al file episodio che abbiamo creato quando abbiamo generato classi Java da Product.xsd.

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

Per ulteriori informazioni

+2

Questo non funziona in modo affidabile con 'maven-jaxb2-plugin', sebbene sia possibile fornire il file episodio, è necessario fornire anche il file dello schema originale. Citazione dalla guida dell'utente del plugin: si noti che JAXB deve ancora accedere agli schemi BOTH A e B durante la compilazione. È possibile utilizzare i cataloghi per fornire posizioni alternative degli schemi importati. –

0

Apparentemente, sono per modular schema creation.

Ciò implica che i file stessi possono essere utilizzati sia come configuratore sia come vista generativa di un livello dati per l'elaborazione downstream. Sarebbe necessario un ulteriore contesto per determinare a quale oggetto si fa riferimento qui.

6

aggiungerò alcune curiosità.

  • In realtà, .episode file sono solo normali file di collegamento (è per questo che lavorano con xjc -b).
  • Possono essere generati con uno speciale plug-in integrato (è ciò che fa -episode).
  • Se inserito in un JAR sotto il percorso META-INF/sun-jaxb.episode, è possibile eseguire xjc b.xsd a.jar - XJC analizzerà i file JAR per i file degli episodi, quindi utilizzerà automaticamente i file di rilegatura.
  • Tutta questa bellezza funziona bene con Maven (maven-jaxb2-plugin). Tuttavia, con la versione successiva è possibile utilizzare file di associazione da artefatti JAR anche senza episodi.
+0

Molto buono. Ma non posso legare una documentazione sull'uso degli artefatti JAR – Dherik

+1

@Dherik Vedi le voci delle risorse, basta usarle con 'bindings' invece di' schemas': http://confluence.highsource.org/display/MJIIP/User+Guide#UserGuide -Resourceentries – lexicore

0

Solo un addon per la risposta, vorrei fornire un input su come evitare di avere file di .episode generato durante l'utilizzo di 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> farà sparire .

Problemi correlati