Bonjour à tous,
j'ai un petit (gros) souci d'utilisation de JAXB pour la manipulation de mes fichiers XML.
J'ai créé une XSD définissant l'ensemble de mes types, dont voici un extrait :
J'ai ensuite généré mes classes JAXB sans souci (après vérification, le code a l'air correct), puis j'ai écrit un fichier XML à la main que j'ai fait validé de 3 façons différentes (Eclipse, JAXB validator et ma propre librairie de validation) sans aucun problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <xsd:schema targetNamespace="http://www.mycompany.com/mynamespace" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:myns="http://www.mycompany.com/mynamespace"> <xsd:complexType name="TProductProperties"> <xsd:sequence> <xsd:choice> <xsd:element name="emailBox" type="myns:TEmailBox" /> <xsd:element name="redirection" type="myns:TRedirection" /> </xsd:choice> <xsd:element name="domain" type="myns:TDomain" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> [...] <xsd:element name="productProperties" type="myns:TProductProperties" /> </xsd:schema>
Cependant, au parsing JAXB, pour me transformer le fichier XML en classe, j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 javax.xml.bind.UnmarshalException - with linked exception: [org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'myns:productProperties'.] at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:506) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:324) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:297) [...]
Voici le code que j'utilise :
J'ai déjà bien épluché le Web à la recherche d'une solution (comme celle-ci), mais sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 JAXBContext jaxbContext = JAXBContext.newInstance(TPRoductProperties.class); URL xsdURL = new URL(xsdUri); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = schemaFactory.newSchema(xsdURL); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); unmarshaller.setSchema(schema); Document xmlDocument = [...]; JAXBElement<TProductProperties> root = (JAXBElement<TProductProperties>) unmarshaller.unmarshal(xmlDocument);
J'utilise Maven2 pour rapatrier les dépendances:
- javax.xml.bind:jaxb-api:2.2
- com.sun.xml.bind:jaxb-impl:2.1.9
Please help !
Merci par avance,
Thomas
Partager