2015-10-27 2 views
1

Je sais qu'il ya quelques questions saxparser là-bas, mais je ne peux pas trouver un qui décrit mon problème:SAXParser jette FileNotFoundException dépit de ne pas avoir reçu un fichier pour analyser

J'ai une chaîne contenant des données XML, et je il passe à un am ByteArrayInputStream:

public boolean parse(String message) { 
     ByteArrayInputStream bis = new ByteArrayInputStream(message.getBytes()); 

et j'appeler la méthode d'analyse sur elle

saxparser.parse(bis, handler); //this row throws a FileNotFoundException 

en dépit de ne pas mentionner tous les fichiers, l'analyse syntaxique jette un FileNotFoundException. Bizarrement, il essaie de trouver un nom de fichier dans mon espace de travail qui n'existe pas et plus tard, j'ai trouvé que le nom de fichier fait partie d'une chaîne entre guillemets (voir ci-dessous, appelons le fichier "theFile.extension")

EDIT: Je pensais que peut-être mon XML est mal écrit pour une raison:

<?xml version="1.0"?> 
<!DOCTYPE presence PUBLIC "Some-valid-stuff" "theFile.extension"> 

Où dois-je chercher une solution dans ce cas?

Merci

+1

DOCTYPE x PUBLIC "..." "emplacement" essaie de trouver un fichier à votre "emplacement" (local). Apparemment, vous ne l'avez pas. – laune

+1

L'analyseur SAX tente de valider le fichier XML à l'aide du fichier spécifié. Je ne me souviens pas maintenant mais il y a un moyen de désactiver la validation –

Répondre

3

L'analyseur SAX tente de valider le fichier XML en utilisant le fichier DTD spécifié, et c'est la raison pour laquelle il essaie de charger ce fichier.

Vous pouvez désactiver la validation comme ci-dessous.

saxParserFactory.setValidating(false) 
saxParserFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) 
+0

Cela a fonctionné comme un charme. Je ne sais malheureusement pas comment j'aurais pu le comprendre à partir de l'API. Pensez-vous que j'ai raté quelque chose, ou que cette expérience est nécessaire? Merci beaucoup –

+0

Peut-être un peu des deux :). L'exception a dit qu'il cherchait le fichier mentionné dans DOCTYPE et si vous connaissez le but de ce fichier, c'est-à-dire la validation, alors peut-être auriez-vous pu chercher la méthode relative à la validation dans l'API de l'analyseur. –