[java DOM]parsing d'un xml

parsing d'un xml [java DOM] - Java - Programmation

Marsh Posté le 08-04-2005 à 15:01:12    

J'essaie de parser un fichier xml (un web.xml, en fait, qui sert de config à une servlet, et dans lequel je veux récupérer une info sans passer par la servlet) à l'aide du code suivant :

Code :
  1. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  2.     factory.setNamespaceAware(true);
  3.     // Lancer le parsing du fichier
  4.     DocumentBuilder docBuilder = factory.newDocumentBuilder();
  5.     return docBuilder.parse("./WebContent/WEB-INF/web.xml" );


 
Sachant que le web.xml est relié à une DTD de sun

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">


 
Résultat : il y arrive pas, parce qu'il a semble-t-il du mal avec l'adresse de la .dtd

Code :
  1. java.net.UnknownHostException: java.sun.com


 
Qqu'un serait en mesure de m'expliquer ce qui se passe ?

Reply

Marsh Posté le 08-04-2005 à 15:01:12   

Reply

Marsh Posté le 08-04-2005 à 15:02:41    

Le resolver cherche à se brancher sur le site de sun pour la DTD, mais ne peux pas (tu es sans doutes derrière un proxy). Il faiut que tu implémente un DTDResolver qui va récupérer le fichier en local si tu veux valider.


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 08-04-2005 à 15:24:43    

Ok thx, je vais voir avec ça :jap:

Reply

Marsh Posté le 08-04-2005 à 15:28:33    

Salut,
 
j'ai l'impression, après quelques tests de chez moi, que le problème survient lorsqu'il cherche (en interne) le "InetAddress.getByName( ton_uri )" qui correspond à l'ip distante.
 
tu peux essayer de remplacer "java.sun.com" par son ip directe dans l'uri (209.249.116.141) car la fonction getByName ne fais que vérifier la validité de l'addresse dans ce format sans faire de requete sur le reseau.
 
sinon, le pb doit venir de ton reseau (firewall ou autre ...)


---------------
The Rom's, à votre service
Reply

Marsh Posté le 08-04-2005 à 15:50:51    

le mieux c'est comme dis kadreg de faire un resolver. en sachant que si tu retourne un Inputstream vide, tu n'auras pas de validation (ce qui n'est pas plus mal dans ton cas)

Reply

Marsh Posté le 08-04-2005 à 17:29:09    

TheRom_S a écrit :

Salut,
 
j'ai l'impression, après quelques tests de chez moi, que le problème survient lorsqu'il cherche (en interne) le "InetAddress.getByName( ton_uri )" qui correspond à l'ip distante.
 
tu peux essayer de remplacer "java.sun.com" par son ip directe dans l'uri (209.249.116.141) car la fonction getByName ne fais que vérifier la validité de l'addresse dans ce format sans faire de requete sur le reseau.
 
sinon, le pb doit venir de ton reseau (firewall ou autre ...)


Bon ben le remplacement change effectivt qqch : j'ai une autre erreur lors du parsing :/

Code :
  1. java.net.NoRouteToHostException: Host unreachable: connect


 

benou a écrit :

le mieux c'est comme dis kadreg de faire un resolver. en sachant que si tu retourne un Inputstream vide, tu n'auras pas de validation (ce qui n'est pas plus mal dans ton cas)


Ben quand je retourne un new InputSource() j'ai autre chose :

Code :
  1. java.net.MalformedURLException: java.lang.NullPointerException


 
En fait j'ai l'impression, d'après la javaDoc, qu'il faut vraiment renvoyer une DTD locale avec le resolver... Y'aurait pas moyen de dire au parser d'ignorer la déclaration de DTD, dont j'ai rien à foutre ds ce cas-là ? (je peux pas la virer, parce que le fichier est d'autre part utilisé par une servlet)

Reply

Marsh Posté le 08-04-2005 à 18:04:58    

scOulOu a écrit :

Code :
  1. java.net.NoRouteToHostException: Host unreachable: connect



 
A part un probleme dans ta config reseau, je vois pas ...
vérifie simplement avec l'adresse dans internet explorer par exemple (tu verras rien c normal mais tu verifie l acces)
 
dans l'api :
"Signals that an error occurred while attempting to connect a socket to a remote address and port. Typically, the remote host cannot be reached because of an intervening firewall, or if an intermediate router is down."


---------------
The Rom's, à votre service
Reply

Marsh Posté le 08-04-2005 à 18:12:36    

TheRom_S a écrit :

A part un probleme dans ta config reseau, je vois pas ...
vérifie simplement avec l'adresse dans internet explorer par exemple (tu verras rien c normal mais tu verifie l acces)


Ca passe nickel par un explorateur (ie ou firefox). En fait j'ai essayé en foutant un adresse à la con ds l'InputSource du resolver (genr www.yahoo.fr) et pareil, il trve pas (UnknownHostException)...
Dc y'a pas moyen de lui dire de pas faire gaffe à cette foutue DTD ?

Reply

Marsh Posté le 08-04-2005 à 18:23:03    

Aaaah ben c'est bon, j'ai réussi à lui faire ignorer les DTD. Faut retourner un new InputSource(new StringReader("" )) par le resolver, en fait. new InputSource() et new InputSource("" ) foirent.
 
Merci à tlm :jap:

Reply

Marsh Posté le 14-04-2005 à 17:41:49    

Tu peux me faire un copier/coller de tes sources.
Je n'arrive toujours pas à parser le fichier "web.xml" pour en lire le contenu...

Reply

Marsh Posté le 14-04-2005 à 17:41:49   

Reply

Marsh Posté le 14-04-2005 à 18:09:40    

scOulOu a écrit :


Dc y'a pas moyen de lui dire de pas faire gaffe à cette foutue DTD ?


DocumentBuilderFactory.setValidating(boolean validating)  ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed