29 votes

Schémas JAXB multiples avec référence d'élément

J'ai deux schémas qui sont traitées à l'aide de JAXB. Le premier schéma est analysée et les informations de ce est utilisé à l'aide d'un épisode de fichier (suite http://www.java.net/blog/2006/09/05/separate-compilation-jaxb-ri-21). Le deuxième schéma, les importations de la première, et de nouveau à l'aide de jaxb, est traitée. Tout cela fonctionne comme prévu.

Mais maintenant, j'ai un élément dans le premier schéma, qui est utilisé dans la seconde à l'aide d'une référence.

Schéma:

<schema elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:test="http://www.example.org/Test/"
targetNamespace="http://www.example.org/Test/">
<element name="type" type="test:MyType"></element>

Schéma b:

<schema elementFormDefault="qualified" 
xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:second="http://www.example.org/Second/"
xmlns:test="http://www.example.org/Test/"
targetNamespace="http://www.example.org/Second/">

<import namespace="http://www.example.org/Test/" />

<complexType name="SomeType">
    <sequence>
        <element ref="test:type" minOccurs="1" maxOccurs="unbounded" />
    </sequence>
</complexType>

Pendant le traitement, rien n'est mauvais, mais le code généré pour les deux schémas fournissent la même méthode:

public JAXBElement<EventType> createType(TypeType value)

Au moment de l'exécution, le message d'erreur suivant:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of 
    IllegalAnnotationExceptions
The element name {http://www.example.org/Type/}type has more than one mapping.

Comment puis-je empêcher JAXB de la création de la double createType méthodes?

Merci à l'avance!

Mise à jour: j'ai posé cette même question sur le JAXB liste de diffusion, sur cette liste, j'ai aussi posté un exemple de travail. Le fil et l'exemple peut être trouvé à: http://java.net/projects/jaxb/lists/users/archive/2011-03/message/18

Sur cette liste, j'ai suggéré une solution de contournement, et maintenant je peux utiliser les schémas de la façon dont je l'aime. Mais je pense toujours que JAXB ne doivent pas créer de supplémentaires de "créer" la méthode, car il doit déjà être dans l'épisode de fichier.

1voto

Andrew Carr Points 461

J'ai écrit quelques Définitions de Schéma dans ma journée. Vous devez déclarer votre premier xsd dans votre deuxième déclaration de schéma et ensuite, vous êtes à l'importation.

Comme par MSDN, lorsque vous importez un fichier XSD vous ne l'incluez pas dans le Schéma de la Déclaration. C'est là où il est dans votre déclaration de schéma.

xmlns:test="http://www.example.org/Test/"

Supprimer ce et il suffit de faire l'import... ( <xs:import namespace="http://www.example.com/IPO" /> )

voir:http://msdn.microsoft.com/en-us/library/ms256480.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X