2010-12-15 84 views
5

Je continue de recevoir l'erreur suivante lorsque j'essaie de déformer un document XML en utilisant JAXB. L'erreur se lit comme suit:Exception cvc-elt.1: Impossible de trouver la déclaration de l'élément 'AsifXml' lors de la tentative d'unmarshall à l'aide de JAXB

-cvc elt.1: Vous ne trouvez pas la déclaration de l'élément 'AsifXml'

code

à unmarshall est ceci:

JAXBContext jc = JAXBContext.newInstance("asif_objects"); 
    Unmarshaller u = jc.createUnmarshaller(); 
    SchemaFactory sf = SchemaFactory.newInstance(
      javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    Schema schema = sf.newSchema(new File("ASIF_Schema1.1.6.xsd")); 
    u.setSchema(schema); 

    AsifXml doc 
     = (AsifXml)u.unmarshal(new FileInputStream("asif_small.xml")); 

je crois que le correspondant une partie des fichiers xsd ressemble à ceci (omission d'ouverture et de fermeture de tags car je ne suis pas sûr de savoir comment les formater sur le site:

?xml version="1.0" encoding="UTF-8"? 
xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:asif="http://www.website.com/ASIF" 
targetNamespace="http://www.website.com/ASIF" elementFormDefault="qualified" 
attributeFormDefault="unqualified" version="1.1.6" 

xs:element name="AsifXml" 
    xs:complexType 

Et ce que je crois être le XML est pertinent ici:

AsifXml xmlns:AsifXml="http://www.website.com/ASIF" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1.4" 
content="study" 

Jusqu'à présent, je l'ai essayé googler pour cette même erreur, mais il semble que la plupart des réponses ont à voir avec des erreurs dans les services Web que je suis n'utilise pas. Je pensais aussi que j'avais des problèmes de validation parce que je suis derrière un proxy et qu'il était incapable d'atteindre l'url donné dans les documents du schéma, mais après de nouvelles recherches, j'ai l'impression que ces url ne doivent pas exister valider le document. Et j'ai essayé sur un autre réseau qui n'est pas derrière un proxy et a reçu la même erreur.

Toute aide concernant ce problème est grandement appréciée.

+0

Je dois également noter que le fichier .xsd et le fichier XML que j'utilise m'ont tous deux été fournis. Je viens aussi de remarquer que le fichier xml appelle une version de 1.1.4 alors que le fichier .xsd appelle une version de 1.1.6. Cela pourrait-il être le problème? –

Répondre

4

L'exemple de fichier XML me semble bidon. Il semble bien à première vue, mais il n'a pas de sens:

<AsifXml xmlns:AsifXml="http://www.website.com/ASIF"> 

Cette déclare une balise appelée AsifXml, et déclare un espace de noms XML avec un préfixe aussi appelé AsifXml. Cependant, les deux n'ont rien à faire l'un avec l'autre. L'élément lui-même est laissé sans aucun espace de noms, ce qui viole le schéma.

Essayez l'exemple suivant à la place, il devrait fonctionner:

<AsifXml xmlns="http://www.website.com/ASIF" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     version="1.1.4" 
     content="study"> 

Cet exemple dire que l'élément AsifXml a l'espace de noms http://www.website.com/ASIF, qui est ce que le schéma attend.

Cet échantillon pourrait être encodées comme équivalente:

<AsifXml:AsifXml xmlns:AsifXml="http://www.website.com/ASIF" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     version="1.1.4" 
     content="study"> 

Il revient à la même chose, mais cette version est source de confusion et bavard.

+2

Ah cela fonctionne parfaitement. Merci beaucoup pour la réponse et m'aider à comprendre un peu plus sur le fonctionnement du schéma XML. –