2010-06-03 4 views
1

J'ai un XSD (pour Basecamp xml) qui contientJAXB ne génère pas d'interface pour l'élément de type complexe

<xsd:complexType name="ProjectType"> 
    <xsd:sequence> 
     <xsd:element name="announcement" 
        type="TypedNilableStringElementType" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="created-on" 
        type="TypedDateElementType" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="id" 
        type="TypedIntegerElementType" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="last-changed-on" 
        type="TypedDateTimeElementType" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="name" 
        type="xsd:string" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="show-announcement" 
        type="TypedBooleanElementType" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="show-writeboards" 
        type="TypedBooleanElementType" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="start-page" 
        type="xsd:string" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="status" 
        type="xsd:string" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
     <xsd:element name="company" 
        type="SimpleCompanyType" 
        maxOccurs="1" 
        minOccurs="1"> 
     </xsd:element> 
    </xsd:sequence> 
</xsd:complexType> 

et

<xsd:element name="project" 
      type="ProjectType"> 
</xsd:element> 

Je regarde http://java.sun.com/javaee/5/docs/tutorial/doc/bnbah.html et ne peut pas comprendre ce que je fais différemment de l'exemple de schéma du Tableau 17-13 où il y a un élément nommé purchaseOrder de type PurchaseOrderType. Selon le tutoriel, en exécutant xjc sur le schéma, on obtiendra une interface PurchaseOrder.java et une interface PurchaseOrderType.java. Lorsque j'exécute xjc sur mon schéma, je reçois uniquement une classe ProjectType.java, et quand le xml est constitué d'un seul élément <project ...></project>, cela ne va pas analyser car il n'y a pas de classe/interface Project.java à faire correspondre.

+0

Quelle partie du tutoriel est décrit dans ce? JAXB ne génère généralement pas d'interfaces, mais seulement des classes de bean. – skaffman

+0

Voir l'url ci-dessus, tableau 17-13 - Lorsque j'exécute xjc sur cette xsd, je n'ai que PurchaseOrderType.java et pas PurchaseOrder.java. Cela est équivalent à mon xsd, où je reçois seulement ProjectType.java et pas Project.java pour l'élément . Je veux définir la structure de Project en tant que complexType, et puis tous les deux ont un élément contenant un nombre de (cela marche très bien), mais je veux aussi être capable de gérer un seul est l'élément racine et xjc ne génère pas de classe d'élément pour cela. –

+0

Je peux ajouter un @XmlRootElement (nom = "projet") au fichier ProjectType.java, puis je peux marshall et demarshall xml avec comme balise racine. Mais quand j'ai déjà spécifié un élément "projet" de type ProjectType dans le xsd, je suppose que jaxb le ferait pour moi automagiquement. Je n'aime pas avoir à modifier le code généré par jaxb manuellement. –

Répondre

Questions connexes