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 :

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 parsage se deroule tres bien, je peux recuperer des informations dans ma "string" (mon document XML).
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 :
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 ? false
> Closed ? true


et si je fais :
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
> 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 :

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());
Donc heu... ça non plus ça marche pas.
Voila j'espere que j'ai été assez clair et que la solution de ce probleme aidera nombre d'entre nous !