Fermeture de Socket apres parsage XML
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:
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:
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:
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:
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 ;) !