[JAXB] Problème parsing XML avec XSD validant
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:
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:
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:
<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