9
votes

Schéma XML aux classes Java avec XJC

J'utilise XJC pour générer des classes Java à partir du schéma XML et vous trouverez un extrait de la XSD.

* You are getting this "catch-all" property because of the following reason: 
* The field name "UnstructuredName" is used by two different parts of a schema. See: 
* line XXXX of file:FILE.xsd
* line XXXX of file:FILE.xsd
* To get rid of this property, apply a property customization to one 
* of both of the following declarations to change their names: 
* Gets the value of the content property.


0 commentaires

4 Réponses :


1
votes

Le problème essentiel est que vous avez un consistant en un , qui se traduit en java à "A Liste des choses ". La structure de type de Java n'est pas suffisamment flexible pour la représenter mieux.

Une personnalisation contraignante pourrait vous aider, mais dans ce cas, je suppose que je ne peux pas voir un meilleur moyen de représenter ces informations.

Une technique alternative que j'ai utilisée dans le passé est de transmettre le schéma à travers une simple transformation XSLT en premier, réorganisant les composants en quelque chose de plus jaxb, tout en permettant toujours aux mêmes structures que les documents auront en réalité. De cette façon, vous pouvez "changer" le schéma sans changer l'original.


1 commentaires

Je ne sais pas bien comment la réorganisation des éléments peut aider dans ce cas. Si je peux la "séquence" intérieure dans un autre élément, ce problème serait résolu? Est-ce réalisable avec la transformation? Si je fais une certaine transformation, j'aurais besoin d'un pour se transformer en une structure que j'aime, puis effectuer une autre transformation dans sa structure d'origine?



2
votes

J'ai eu le même problème. Je suis passé à Xmlbeans et à l'axe. Les Xmlbeans peuvent compiler votre schéma sans problème ni mal à la tête. Jaxb ne peut pas gérer cela. Afin de faire du gérer Jaxb cela, vous pouvez modifier votre schéma un peu.

  <xs:sequence>
          <xs:choice>
    <!-- changed the following line -->
            <xs:element name="UnstructuredTop" type="UnstructuredName"/> 
    <!-- end of change -->
            <xs:sequence>
              <xs:element ref="StructuredName"/>
              <xs:element ref="UnstructuredName" minOccurs="0"/>
            </xs:sequence>
          </xs:choice>
          <xs:element ref="SomethingElse" minOccurs="0"/>
    </xs:sequence>


0 commentaires

5
votes

Vous pouvez également utiliser une personnalisation contraignante appelée : xxx

veuillez préciser que ceci est spécifique au fournisseur (qui utilise autre chose que XJC cependant;))

Plus d'infos ici < / a>


0 commentaires

0
votes

J'ai créé une classe wrapper pour résoudre le problème: xxx

... }

... xxx


0 commentaires