2012-05-02 4 views
8

Ho eseguito molte ricerche e non sono riuscito a trovare un esempio conciso di come mappare uno schema XML a oggetti dominio esistenti invece di crearne di nuovi utilizzando xjc. Ho creato un file bindings (xjb) ma non riesco ancora a trovare un modo per ottenerlo.JAXB associazione xjc a oggetti dominio esistenti

se ho un oggetto di dominio esistente che voglio JAXB da utilizzare come il seguente:

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

E io ho uno schema XML come la seguente:

<?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> 

Se vado a generare le classi JAXB con xjc verrà creata una nuova classe denominata Cliente (che desidero). Creerà anche una nuova classe chiamata CustomerOffice (che non desidero, voglio che utilizzi il mio oggetto dominio esistente).

Quindi, anziché lo schema che punta a "tipo: www: CustomerOffice", vorrei che utilizzasse lo esistente com.blah.domain.CustomerOffice.

Ho cercato di rendere questo un esempio il più semplice possibile, ogni aiuto è apprezzato.

risposta

11

È possibile utilizzare un file di bind esterno per configurare XJC per fare ciò che si desidera.

<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 chiamata

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

che ha funzionato perfetto! Grazie mille, spero che questo possa aiutare alcune altre persone che hanno lottato con questo. – colbyjax