D
DerUnwissende
Gast
Hallo zusammen, ich habe folgendes Problem:
Ich entwickle gerade zum ersten mal eine Client-Server Anwendung und möchte für die Kommunikation XML verwenden. Beim Parsing des InputStreams des Sockets mit SAXParser und einer von DefaultHandler abgeleiteten Klasse wird nun jedoch nicht die endDocument Methode aufgerufen, der Parser scheint einfach weiterhin zu glauben, dass das Dokument noch nicht zu Ende ist. Deshalb kann ich natürlich keine weiteren Dokumente schicken, ohne eine SAXException zu bekommen.
Woran liegt das? Wie kann ich das umgehen, ohne auf SAX zu verzichten, oder die Verbindung nach jeder Datei neu aufbauen zu müssen?
Hier erstmal der der das Dokument sendet:
Hier ein Teil des empfangenden Threads der den Parser in einer Schleife aufruft:
Beispiel XML Datei die ich getestet habe
Ich möchte den ersten Thread jetzt mal nicht weiter mit evt. unnötigem Quelltext überladen, wenn ihr mehr infos braucht einfach schreiben
Vielen Dank schonmal im Voraus
Ich entwickle gerade zum ersten mal eine Client-Server Anwendung und möchte für die Kommunikation XML verwenden. Beim Parsing des InputStreams des Sockets mit SAXParser und einer von DefaultHandler abgeleiteten Klasse wird nun jedoch nicht die endDocument Methode aufgerufen, der Parser scheint einfach weiterhin zu glauben, dass das Dokument noch nicht zu Ende ist. Deshalb kann ich natürlich keine weiteren Dokumente schicken, ohne eine SAXException zu bekommen.
Woran liegt das? Wie kann ich das umgehen, ohne auf SAX zu verzichten, oder die Verbindung nach jeder Datei neu aufbauen zu müssen?
Hier erstmal der der das Dokument sendet:
Code:
TransformerFactory tFactory= TransformerFactory.newInstance();
Transformer t= tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
synchronized(s){ //s ist ein Socket
StreamResult result = new StreamResult(s.getOutputStream());
t.transform(source, result);
}
Hier ein Teil des empfangenden Threads der den Parser in einer Schleife aufruft:
Code:
while(!close){
try{
Debug.out("start of parsing loop");
DefaultHandler handler=new ServerHandler(this, connection);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse( connSocket.getInputStream(), handler );
//der Thread blockiert hier und wartet auf Anfragen vom Client.
}catch(ParserConfigurationException pce){
Debug.out(pce.getMessage());
pce.printStackTrace();
}catch(IOException ioe){
Debug.out("IOException while parsing (maybe interrupted): "+ioe.getMessage());
}catch(SAXException saxe){
Debug.out("SAXExceptin while parsing (maybe interrupted): "+saxe.getMessage());
}finally{
if (connSocket.isClosed()){
//TODO wrong!!!
if(close)
Debug.out("Connection closed Client Sided!");
else{
close=true;
Debug.out("Connection closed Server Sided!");
}
}
}
}
Code:
<?xml version="1.0" encoding="UTF-8"?><TEST_1><TEST_2><TEST_3/></TEST_2><TEST_4/></TEST_1>
Vielen Dank schonmal im Voraus