Bonjour à tous,

Voilà je rencontre actuellement un problème lors du parsing d'un fichier xml avec JAXB lorsque je veux associer le fichier XSD correspondant afin de faire la validation.

Voici un extrait de mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
               JAXBContext jc = JAXBContext.newInstance(new Class[] {MyClass.class});
               Unmarshaller u = jc.createUnmarshaller();
               
               InputStream schemaStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("xsd/myXSD.xsd"); 
               StreamSource schemaSource = new StreamSource(schemaStream);

			   Schema mySchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(schemaSource);               
               u.setSchema(mySchema);
               
               Object unmarshalledObject = u.unmarshal(new FileInputStream(filename));
Le xsd associé au fichier xml est 'myXSD.xsd' et se trouve dans un jar externe.

Mais lorque ce code est exécuté, l'exception suivante est levée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'xsd:myHeader' to a(n) 'type definition' component.
Cela est dû au fait que le type 'xsd:myHeader' est défini dans un autre fichier XSD. (l'instruction suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<xsd:include schemaLocation="commonTypes.xsd"/>
se trouve dans myXSD.xsd)

Je suis tombé sur ce lien décrivant le même problème.

Une solution est de redéfinir le resource resolver en implémentant l'interface "LSResourceResolver" mais je n'ai aucune idée de comment le faire...

Auriez-vous un exemple d'implémentation ou une autre solution pour m'aider à résoudre mon problème ?

Merci d'avance,

Sébastien