2010-04-16 3 views
2

Je ne peux pas obtenir mes classes générées pour implémenter des interfaces.JAXB, Netbeans et le plugin d'insertion d'interface

Ceci est mon fichier de schéma xml:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"    
     xmlns:jxb="http://java.sun.com/xml/ns/jaxb/" 
     xmlns:ai="http://jaxb.dev.java.net/plugin/if_insertion" 
     jxb:extensionBindingPrefixes="ai"> 


    <xs:element name="header"> 
     <xs:annotation> 
      <xs:appinfo> 
       <ai:interfaces check="1"> 
        utility.RuleInterface 
       </ai:interfaces> 
      </xs:appinfo> 
     </xs:annotation> 

     <xs:complexType> 
      bla bla bla 
     </xs:complexType> 

    .... 

j'ai vérifié l'option « Extension » dans les options JAXB et je l'ai ajouté le xjc-if-ins.jar à la section « Bibliothèques » de mes propriétés du projet.

Mais la classe d'en-tête générée n'implémente pas le utility.RuleInterface.

Je peux comprendre ce que je fais mal ... Est-ce quelque chose qui manque?

Répondre

1

Avez-vous activé le plugin? Avec une option comme -Xinheritance?

Voici un autre plugin vous pouvez utiliser:

http://confluence.highsource.org/display/J2B/Inheritance+plugin

Voici un exemple de projet (Ant et Maven):

http://download.java.net/maven/2/org/jvnet/jaxb2_commons/jaxb2-basics-sample-po/0.5.2/

+0

Ici https: // jaxb2-commo ns.dev.java.net/interface-insertion/ il est dit que je dois utiliser l'option -extension, ce que je pense est ce que je fais en cochant l'option "Extension" sur NetBeans. Seulement maintenant je vois l'option -Xifins ... Je pense que maintenant ça va marcher, dommage qu'il ne soit pas possible d'utiliser theese xjc options de netbeans – Segolas

+0

Vous devez également activer ce plugin spécifique en utilisant l'option comme celle que j'ai spécifiée . -extension ne suffit pas. – lexicore

+0

Oui, je me débrouille maintenant. (J'ai modifié mon premier commentaire) Merci pour votre réponse! – Segolas

1

Juste une autre note pour les autres avec le même problème. Les éléments à l'intérieur du fichier de schéma XML doit être écrit ainsi:

<xs:complexType name="header"> 
    <xs:annotation> 
     <xs:appinfo> 
      <ai:interfaces check="0"> 
       utility.RuleInterface 
      </ai:interfaces> 
     </xs:appinfo> 
    </xs:annotation>   
</xs:complexType> 

et vous pouvez vous référer à eux:

<xs:element name="rule"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="header" type="header" maxOccurs="unbounded" /> 
       ... 
      </xs:sequence> 
     <xs:complexType> 

Mon problème était que je l'avais déclaré l'en-tête comme <xs:element name="header"> et que je faisais référence à l'élément avec <xs:element ref="header" maxOccurs="unbounded" /> et cette approche ne semble pas fonctionner ...