Bonjour.
A savoir: Le client et le serveur marchent tres bien, ce n'est qu'apres parsage que les choses se compliquent...!
Mise en situation:
Une communication Client/Serveur via socket.
Le client envoi une "String" XML.
Coté serveur je parse le document XML reçu :
Le parsage se deroule tres bien, je peux recuperer des informations dans ma "string" (mon document XML).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DocumentBuilderFactory maFactory = new DocumentBuilderFactoryImpl(); DocumentBuilder monBuilder = maFactory.newDocumentBuilder(); Document monDocument = monBuilder.parse(maSocket.getInputStream());
Le seul probleme c'est que apres ma socket se ferme pour une raison inconnue! Alors, pourquoi la socket se ferme alors que l'InputStream et la socket n'ont rien à voir ?!
Si je fais :
> Closed ? false
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DocumentBuilderFactory maFactory = new DocumentBuilderFactoryImpl(); DocumentBuilder monBuilder = maFactory.newDocumentBuilder(); System.out.println( "Closed ? "+masocket.isClosed()); Document monDocument = monBuilder.parse(maSocket.getInputStream()); System.out.println( "Closed ? "+masocket.isClosed());
> Closed ? true
et si je fais :
> Closed ? false
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DocumentBuilderFactory maFactory = new DocumentBuilderFactoryImpl(); DocumentBuilder monBuilder = maFactory.newDocumentBuilder(); System.out.println( "Closed ? "+masocket.isClosed()); Document monDocument = null; //monBuilder.parse(maSocket.getInputStream()); System.out.println( "Closed ? "+masocket.isClosed());
> Closed ? false
Visiblement la methode parse de la classe DocumentBuilder ferme effectivement la socket.
Alors voici mes questions :
Que faire pour garder ma socket ouverte ?
Solution par clonage (Super lourd !!!)?
Un clonage est-il obligatoire pour pouvoir dupliquer mon InputStream ?
Note : La creation d'un autre InputStream ne fait qu'une duplication par adresse :
Donc heu... ça non plus ça marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private InputStream iStream = null; ... iStream = socket.getInputStream(); Document monDocument = monBuilder.parse(maSocket.getInputStream());
Voila j'espere que j'ai été assez clair et que la solution de ce probleme aidera nombre d'entre nous!
Partager