2012-05-02 17 views
8

Zrobiłem wiele wyszukiwania i nie mogę znaleźć zwięzły przykład, jak odwzorować schemat XML do istniejących obiektów domeny, zamiast tworzyć nowe z wykorzystaniem xjc. Stworzyłem plik powiązań (xjb), ale nadal nie mogę znaleźć sposobu na osiągnięcie tego.Mapowanie xjc JAXB do istniejących obiektów domeny

Jeśli mam istniejącego obiektu domeny, które chcę JAXB używać takich jak:

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

I mam schematu XML jak poniżej:

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

Jeśli pójdę do wygeneruj klasy JAXB z xjc utworzy nową klasę o nazwie Klient (której chcę). Stworzy również nową klasę o nazwie CustomerOffice (której nie chcę, chcę, aby korzystał z mojego istniejącego obiektu domeny).

Więc zamiast schematu wskazując na "typ: www: CustomerOffice" I chciał to wykorzystać istniejącą com.blah.domain.CustomerOffice.

starałem się zrobić to jak prosty przykład, jak to możliwe, każda pomoc jest mile widziana.

Odpowiedz

11

Można użyć zewnętrznego pliku wiązania skonfigurować XJC robić, co chcesz.

<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 połączeń

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

Że pracował idealnie! Dziękuję bardzo, mam nadzieję, że pomoże to innym osobom, które z tym walczyły. – colbyjax