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 :
Le xsd associé au fichier xml est 'myXSD.xsd' et se trouve dans un jar externe.
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));
Mais lorque ce code est exécuté, l'exception suivante est levée :
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
1
2 org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'xsd:myHeader' to a(n) 'type definition' component.se trouve dans myXSD.xsd)
Code : Sélectionner tout - Visualiser dans une fenêtre à part <xsd:include schemaLocation="commonTypes.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
Partager