2012-05-02 28 views
8

He realizado muchas búsquedas y no puedo encontrar un ejemplo conciso de cómo asignar un esquema XML a objetos de dominio existentes en lugar de crear uno nuevo utilizando xjc. He creado un archivo de enlaces (xjb) pero todavía no puedo encontrar la manera de lograrlo.JAXB mapeo xjc a objetos de dominio existentes

Si tengo un objeto de dominio existente que quiero JAXB para usar como las siguientes:

package com.blah.domain; 
class CustomerOffice{ 
    private int id; 
    private String name; 
    private String phone; 
} 

Y tengo un esquema XML como el siguiente:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:www="http://www.blah.com" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.blah.com" elementFormDefault="unqualified"> 
    <xs:element name="Customer"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="id" type="xs:int" nillable="false" minOccurs="1" maxOccurs="1"/> 
      <xs:element name="name" type="xs:string"/> 
      <xs:element name="city" type="xs:string"/> 
      <xs:element name="CustomerOffice" type="www:CustomerOffice" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:complexType name="CustomerOffice"> 
     <xs:sequence> 
     <xs:element name="name" type="xs:string"/> 
     <xs:element name="length" type="xs:int"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Si voy a Genere las clases JAXB con xjc creará una nueva clase llamada Cliente (que yo quiero). También creará una nueva clase llamada CustomerOffice (que no quiero, quiero que use mi objeto de dominio existente).

Por lo tanto, en lugar del esquema que apunta a "tipo: www: CustomerOffice", me gustaría utilizar el existente com.blah.domain.CustomerOffice.

He intentado hacer de este un ejemplo tan simple como sea posible, se agradece cualquier ayuda.

Respuesta

11

Puede usar un archivo de enlace externo para configurar que XJC haga lo que desee.

<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="yourSchema.xsd"> 
     <jxb:bindings node="//xs:complexType[@name='CustomerOffice']"> 
      <jxb:class ref="com.blah.domain.CustomerOffice"/> 
     </jxb:bindings> 
    </jxb:bindings> 
</jxb:bindings> 

XJC llamada

xjc -d outputDir -b binding.xml yourSchema.xsd 
+2

Eso funcionaba perfecto! Muchas gracias, espero que esto ayude a otras personas que han tenido problemas con esto. – colbyjax

Cuestiones relacionadas