2009-03-03 7 views
0

Je me demandais juste si quelqu'un pouvait donner mon code de validation XML une fois pour voir si je le faisais correctement. Voici la partie du code qui me donne la peine ...Validation XML: est-ce que je fais les choses correctement?

SAXParserFactory factory = SAXParserFactory.newInstance(); 

SchemaFactory schemaFactory = SchemaFactory 
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 

// *** CODE FAILS ON THE BELOW LINE **/ 
factory.setSchema(schemaFactory 
    .newSchema(new Source[] { new StreamSource(schemaStream) })); 

SAXParser parser = factory.newSAXParser(); 

SAXReader reader = new SAXReader(parser.getXMLReader()); 
reader.setValidation(false); 
reader.setErrorHandler(new ResultProducingErrorHandler()); 
reader.read(content); 

Chaque fois que je lance le code ci-dessus, je reçois une erreur le long des lignes de:

src-resolve: Cannot resolve the name 'ns:myStructure' to a(n) 'type definition' component. 

Les éléments mentionnés dans l'erreur les messages sont tous ceux qui sont importés dans le schéma via des appels à < xs: import/>. Le schéma semble valider OK via le W3C XML Schema Validator. Dois-je inclure chacun de ces schémas individuellement ou Java est-il assez intelligent pour aller chercher ces schémas supplémentaires? J'ai essayé de les ajouter dans le tableau passé à l'appel newSchema, mais cela n'a pas fait de différence.

Je ne pense pas que je puisse donner le lien au schéma, donc je cherche vraiment un oui ou un non concernant si mon code semble au moins acceptable.

Répondre

1

Assurez-vous que les instructions xs: import pointent vers des chemins accessibles depuis le répertoire en cours de votre application. Le répertoire actuel n'est peut-être pas ce que vous pensez être.

+0

Les chemins sont uniquement des noms de fichiers (par exemple "abc.xsd"). Ces fichiers vivent dans le même répertoire que le schéma original, donc j'aurais pensé qu'ils auraient été accessibles. Mais alors je ne sais pas grand-chose sur les schémas et l'importation. –

+0

Tout comme un test, essayez de fournir le chemin complet vers les fichiers importés dans le schéma d'importation. – Eddie

+0

Devrait avoir essayé avant que je posté. Avec des chemins complets, ils fonctionnent bien. Donc je suppose que ws: import n'est pas relatif au schéma appelant l'import. Eh bien au moins cela signifie que c'est le schéma (qui doit être accessible sur le web) et pas moi alors. Bravo pour l'aide. –

Questions connexes