2012-02-15 15 views
6

Quiero generar código java desde xsd usando JAXB 2.1 XJC. Tengo un esquema xsd provisto y no puedo cambiarlo. Me gustaría utilizar xjc: modo simple mientras genero clases Java desde el esquema xml.JAXB 2.1 - Personalizar xs: cualquier enlace

En el xsd hay elementos:

<xs:any namespace="##other" processContents="lax"/> 

Como se dice aquí: http://jaxb.java.net/guide/Mapping_of__xs_any___.html que esperaba que estos elementos serán encuadernados a:

@XmlAnyElement(lax=true) 
public Object any; 

pero cuando se utiliza el modo de unión sencilla xjc: simple Tengo:

@XmlAnyElement 
protected Element any; 

Estaba intentando encontrar una solución, pero en todos lados se dice que xs: any se maneja sin configuración. La única forma de tener xs: cualquier elemento como java.lang.Object es soltar xjc: simple o cambiar processContents a "strict" en xsd. Ninguna de estas opciones es aceptable en este momento para mí, ya que no puedo cambiar el esquema xml y tengo un código heredado que depende de las clases Java generadas con xjc: modo simple, pero ahora necesito usar xs: cualquier elemento y me gustaría evite el uso de objetos org.w3c.dom.Element.

Cualquier ayuda sería muy apreciada. Gracias.

Respuesta

5

Puede usar el Wildcard plugin desde JAXB2 Basics. Esto le permite personalizar laxa/Salto/estrictas vinculante comodín modos:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:wildcard="http://jaxb2-commons.dev.java.net/basic/wildcard" 
    jaxb:version="2.1" 
    jaxb:extensionBindingPrefixes="wildcard"> 

... 

    <xs:complexType name="issueJIIB10Type" mixed="true"> 
     <xs:annotation> 
      <xs:appinfo> 
       <wildcard:lax/> 
      </xs:appinfo> 
     </xs:annotation> 
     <xs:complexContent mixed="true"> 
      <xs:extension base="xs:anyType"/> 
     </xs:complexContent> 
    </xs:complexType> 

... 

</xs:schema> 

Usted no tiene que cambiar el esquema de este, puede utilizar esta personalización a través de archivos de unión.

+0

Incluso leí acerca de este complemento, pero no estaba seguro de si esta es la dirección correcta. Gracias por la respuesta. Lo verificaré tan pronto tenga algún tiempo libre en el proyecto. – arek

+1

Gracias lexicore, este complemento es casi lo que necesitaba. Dije casi porque no pude encontrar una manera de cambiar globalmente xs: any a java.lang.Object. Cada situación debe configurarse por separado, lo que es un poco molesto. Solo para el registro de cualquier persona que necesite configurarlo a través de un archivo vinculante (el complemento no cubre este caso), debe apuntar directamente al tipo complejo, por ejemplo: arek

+0

@Arek Por favor, presente un problema en JAXB2 Basics, this es factible – lexicore

Cuestiones relacionadas