Usando una aplicación JAXB 2.1 (Metro, EclipseLink MOXy, Apache JaxMe, etc.), se puede especificar que el esquema tipos corresponden a las clases existentes con el fin de evitar que se genere.
Por ejemplo:
root.xsd
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/root">
<xsd:import schemaLocation="imported.xsd" namespace="http://www.example.com/imported"/>
<xsd:complexType name="root">
<xsd:attribute name="root-prop" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
imported.xsd
<?xml version="1.0"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.example.com/imported"
targetNamespace="http://www.example.com/imported">
<xsd:complexType name="imported">
<xsd:attribute name="imported-prop" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
Planteamiento del problema
Si se utiliza la herramienta XJC para generar clases Java desde el esquema XML:
xjc -d out root.xsd
Usted se genera el siguiente:
com\example\imported\Imported.java
com\example\imported\ObjectFactory.java
com\example\imported\package-info.java
com\example\root\ObjectFactory.java
com\example\root\Root.java
com\example\root\package-info.java
importados-bindings.xml
Puede utilice un archivo de enlaces JAXB para especificar que los tipos de importado.xsd apuntan a las clases existentes:
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="imported.xsd">
<jxb:bindings node="//xs:complexType[@name='imported']">
<jxb:class ref="com.example.imported.Imported"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Ejecución del XJC
Ahora bien, si corremos XJC con fijaciones Ficha:
xjc -d out -b imported-bindings.xml root.xsd
Ninguno de los archivos especificados en el archivo de enlaces se generará:
com\example\root\ObjectFactory.java
com\example\root\Root.java
com\example\root\package-info.java
Enfoque alternativo
El código generado directamente desde el esquema importado (xjc imported.xsd) e indirectamente (xjc root.xsd) es el mismo. Simplemente puede soltar el código generado indirectamente y apuntar al proyecto que contiene el código que se generó directamente.
+1 - Este es un ejemplo del uso de archivos de episodios: http: // weblogs.java.net/blog/kohsuke/archive/2006/09/separate_compil.html?force=741 –
¡Hermoso, gracias! –