2012-03-18 21 views

Respuesta

26

Nota: Soy el líder EclipseLink JAXB (MOXy) y miembro del grupo de expertos JAXB 2 (JSR-222).

Un archivo .episode es generado por el compilador XJC (XML Schema to Java). Es un esquema de enlaces que asocia tipos de esquema con clases existentes. Es útil cuando tiene un esquema XML que es importado por otros esquemas ya que impide que el modelo se regenere. A continuación se muestra un ejemplo:

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> 

Desde varios esquemas XML importar se Product.xsd podemos aprovechar archivos de episodios para que las clases correspondientes a Product.xsd sólo se generan una vez.

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

ProductPurchaseRequest.xsd

A continuación se muestra un ejemplo de un esquema XML que 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> 

Cuando generamos las clases de este esquema XML vamos a hacer referencia al episodio archivo que creamos cuando generamos clases Java desde Product.xsd.

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

ProductQuoteRequest.xsd

A continuación se muestra otro ejemplo de un esquema XML que 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> 

Una vez más, cuando generamos las clases de este esquema XML vamos a hacer referencia a la archivo de episodio que creamos cuando generamos clases Java desde Product.xsd.

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

Para más información

+2

Esto no funciona de manera confiable con el 'maven-jaxb2-plugin', aunque puede proporcionar el archivo de episodio, también debe proporcionar el archivo de esquema original. Cita de la guía del usuario del complemento: tenga en cuenta que JAXB aún necesita acceder a AMBOS esquemas A y B durante la compilación. Puede usar catálogos para proporcionar ubicaciones alternativas de los esquemas importados. –

0

Aparentemente, son para modular schema creation.

Esto implica que los archivos en sí mismos se pueden usar como un configurador y como una vista generativa de una capa de datos para el procesamiento posterior. Se necesitaría más contexto para determinar a qué se hace referencia aquí.

6

voy a añadir algunas curiosidades.

  • En realidad, .episode archivos son archivos de enlace simplemente normales (por eso es que trabajan con xjc -b).
  • Se pueden generar con un complemento incorporado especial (eso es lo que hace -episode).
  • Si se coloca en un JAR bajo la ruta META-INF/sun-jaxb.episode, puede hacer xjc b.xsd a.jar - XJC escaneará archivos JAR para archivos de episodios y luego los utilizará como archivos vinculantes automáticamente.
  • Todo esto belleza funciona bien con Maven (maven-jaxb2-plugin). Sin embargo, con la versión posterior puede usar archivos vinculantes de artefactos JAR incluso sin episodios.
+0

Muy bien. Pero no puedo vincular una documentación sobre el uso de los artefactos JAR – Dherik

+1

@Dherik Ver entradas de recursos, simplemente utilícelas con 'bindings' en lugar de' schemas': http://confluence.highsource.org/display/MJIIP/User+Guide#UserGuide -Referencias de recursos – lexicore

0

Sólo un complemento a la respuesta, me gustaría dar una opinión sobre la manera de evitar que el archivo .episode genera durante el uso 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> hará desaparecer .