2012-05-02 2 views
8

J'ai effectué beaucoup de recherches et je ne trouve pas d'exemple concis de mappage d'un schéma XML à des objets de domaine existants au lieu de créer de nouveaux objets en utilisant xjc. J'ai créé un fichier de liaisons (xjb) mais je ne trouve toujours aucun moyen d'y parvenir.JAXB xjc mappage vers des objets de domaine existants

Si j'ai un domaine existant objet que je veux JAXB utiliser comme les suivantes:

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

Et j'ai un schéma XML comme suit:

<?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 je vais générer les classes JAXB avec xjc il va créer une nouvelle classe appelée Client (que je veux). Il créera également une nouvelle classe appelée CustomerOffice (dont je ne veux pas, je veux qu'il utilise mon objet de domaine existant). Donc, à la place du schéma pointant sur "type: www: CustomerOffice", je voudrais utiliser le com.blah.domain.CustomerOffice existant.

J'ai essayé de rendre cet exemple aussi simple que possible, toute aide est appréciée.

Répondre

11

Vous pouvez utiliser un fichier de liaison externe pour configurer XJC pour qu'il fasse ce que vous voulez.

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

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

Cela a fonctionné parfait! Merci beaucoup, j'espère que cela aidera d'autres personnes qui ont lutté avec cela. – colbyjax

Questions connexes