2010-07-27 3 views
2

J'essaie de valider un fichier XML que je crée avec un schéma local, mais une erreur bizarre se produit. Mon code:Erreur lors de la tentative de validation de XML en Java

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 

SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 

factory.setSchema(schemaFactory.newSchema(
    new Source[] {new StreamSource("\\.\\schema\\xsd_me_ene_diaria.xsd")})); 

Et ma trace de pile est la suivante.

java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null" 
at javax.xml.parsers.SAXParserFactory.setSchema(Unknown Source) 
at SaxValidacao.validateSchema(SaxValidacao.java:36) 

L'erreur se déclenche juste après l'appel de setSchema.

Un indice ou un autre conseil pour la validation XML en Java?

Répondre

3

Une chose qui arrive parfois est le mélange de différentes versions de l'analyseur. Si vous utilisez java 5 ou supérieur, essayez de supprimer les références aux bibliothèques xalan ou xerces externes. (Tout ce dont vous avez besoin pour traiter XML est inclus dans la distribution standard de Java 5)

+0

Exactement! J'ai eu une lib incorrecte référencée. Après votre je l'ai réalisé! – Custodio

1

Pouvez-vous désactiver la validation et analyser le flux? Si oui, il est peu probable que ce soit un conflit JAR.

Je pense que votre problème est l'accès au schéma.

1

Un problème possible est que votre analyseur JAXP est très ancien et ne prend pas en charge la méthode setSchema. Regardez le javadoc pour SAXParsesrFactory. Pour setSchema (et bien d'autres méthodes), il est dit:

Lancers:

java.lang.UnsupportedOperationException - Pour la compatibilité ascendante, lorsque les mises en œuvre pour les versions antérieures de JAXP est utilisé, cette exception sera lancé.

Vérifiez l'implémentation de l'analyseur que vous utilisez et essayez de mettre à jour vers une version plus récente.

Questions connexes