xjc: Deux déclarations de causer une collision dans le ObjectFactory classe
Exécutant la commande suivante xjc de commande génère une erreur :
$ xjc "ftp://ftp.ncbi.nih.gov/bioproject/Schema/Core.xsd"
parsing a schema...
compiling a schema...
[ERROR] Two declarations cause a collision in the ObjectFactory class.
line 340 of ftp://ftp.ncbi.nih.gov/bioproject/Schema/Core.xsd
[ERROR] (Related to above error) This is the other declaration.
line 475 of ftp://ftp.ncbi.nih.gov/bioproject/Schema/Core.xsd
Même si je comprends la JAXB liaisons et quels sont les conflits dans XJC, je ne comprends pas où est le conflit dans le schéma actuel.
comment dois-je résoudre ce problème ?
Merci,
Pierre
mise à jour: voici le contexte de l'erreur:
$ curl -s "ftp://ftp.ncbi.nih.gov/bioproject/Schema/Core.xsd" | sed 's/^[ \t]*//' | cat -n | egrep -w -A 10 -B 10 '(340|475)'
330 <xs:element maxOccurs="1" name="Description"
331 type="xs:string" minOccurs="0">
332 <xs:annotation>
333 <xs:documentation>
334 Optionally provide description especially when "eOther" is selected
335 </xs:documentation>
336 </xs:annotation>
337 </xs:element>
338 <xs:element name="BioSampleSet" minOccurs="0" maxOccurs="1"><xs:annotation><xs:documentation>Identifier of the BioSample when known</xs:documentation>
339 </xs:annotation>
340 <xs:complexType><xs:sequence><xs:element name="ID" maxOccurs="unbounded" type="xs:token"></xs:element>
341 </xs:sequence>
342 </xs:complexType>
343 </xs:element>
344 </xs:sequence>
345 <xs:attribute name="sample_scope" use="required">
346 <xs:annotation>
347 <xs:documentation>
348 The scope and purity of the biological sample used for the study
349 </xs:documentation>
350 </xs:annotation>
--
465 <xs:documentation>Please, fill Description element when choose "eOther"</xs:documentation>
466 </xs:annotation>
467 </xs:enumeration>
468 </xs:restriction>
469 </xs:simpleType>
470 </xs:attribute>
471 </xs:complexType>
472 </xs:element>
473 <xs:element name="TargetBioSampleSet">
474 <xs:annotation><xs:documentation>Set of Targets references to BioSamples</xs:documentation></xs:annotation>
475 <xs:complexType>
476 <xs:sequence>
477 <xs:element name="ID" type="xs:token" minOccurs="1" maxOccurs="unbounded"></xs:element>
478 </xs:sequence>
479 </xs:complexType>
480 </xs:element>
481 </xs:choice>
482 <xs:element name="Method" minOccurs="1">
483 <xs:annotation>
484 <xs:documentation>
485 The core experimental approach used to obtain the data that is submitted to archival databases
- je ne pense pas que n'importe qui peut vous aider si vous ne fournissez pas les parties pertinentes de Base.xsd
- Également essayer d'utiliser la plus récente de Java JDK de les générer. J'ai eu beaucoup de dupliquer les erreurs à l'aide du JDK 1.7 jusqu'à ce que j'ai utilisé xjc dans le JDK 1.8. Aussi dans le cas où quelqu'un essaie de générer par clic droit > Générer dans Eclipse, assurez-vous de l'essayer à partir de la ligne de commande trop. Ce faisant résolu erreur pour moi.
Vous devez vous connecter pour publier un commentaire.
Je vais citer la plupart des officiels guide non officiel sur JAXB sur le net.
Cela dit, vous avez deux options.
La première est de définir un externe de liaison XML comme ceci
Dans le générés
ObjectFactory
classe, cela va créer deux méthodes appeléescreateTypeBioSampleSet
etcreateTypeTargetBioSampleSet
(JAXB ajouter le nom que vous spécifiez pour le motcreate
) qui peut être utilisé pour produire de l'BioSampleSet
etTargetBioSampleSet
objets.(Il n'est pas nécessaire de définir une liaison pour les deux types.)
Je ne suis pas exactement pourquoi, JAXB refuse de générer des classes du schéma donné, mais quand j'ai spécifié une seule liaison (pour
BioSampleSet
par exemple), alors que l'autre type de méthode de fabrique, a été nommé commecreateTypeProjectProjectTypeSubmissionWhateverThisAndThatTargetTargetSampleBioCatDogWoofTypeIDoNotKnowWhatElse
donc je pense que JAXB étouffé sur cette longue identificateur de méthode, parce qu'il a réussi à créer le même pour les deux types. Je pense que c'est de l'implémentation en détail dans JAXB.L'autre solution est de créer un type de base pour un
BioSampleSet
et de l'utiliser à la fois des endroits comme ceLa meilleure solution serait de supprimer chaque type anonyme déclarations de votre schéma. Si vous pouvez le faire, le faire, parce que ce schéma ressemble à un gâchis (du moins pour moi).