/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
xml parsing med javax.xml.parsers.Document~
Fra : René Iversen


Dato : 24-02-04 12:18

Jeg har følgende kode:

public void parse( Socket socket ) throws ParserConfigurationException,
SAXException, IOException
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

System.out.println( "[XMLRecvServer] Parsing data received by
client..." );

// BufferedReader reader = new BufferedReader( new InputStreamReader(
socket.getInputStream() ) );

// try
// {
// Thread.sleep( 1000 );
// }
// catch( Exception e ){}

// while( true )
// System.out.print( (char) reader.read() );

Document document = db.parse( socket.getInputStream() );
XMLParser parser = (XMLParser) parsers.get(
document.getDocumentElement().getTagName() );
System.out.println( "[XMLRecvServer] Parsing data to xml file..." );
parser.parseToFile( document );
System.out.println( "[XMLRecvServer] Finished parsing." );
}

Hvis jeg bruger den kode der er udkommenteret, modtager jeg fint teksten,
som er et XML dokument.

Men hvis jeg bruger db.parse( socket.getInputStream() ), så låser den i det
kald... dvs. Parsing data to xml file... bliver ikke udskrevet.

Hvad kan årsagen være? Jeg kan ikke se, det skulle være et problem, jeg
parser direkte fra en Socket...?



 
 
Filip Larsen (24-02-2004)
Kommentar
Fra : Filip Larsen


Dato : 24-02-04 18:51

René Iversen skrev

> Jeg har følgende kode:
>
> *klip*
>
> Hvis jeg bruger den kode der er udkommenteret, modtager jeg fint
teksten,
> som er et XML dokument.
> Men hvis jeg bruger db.parse( socket.getInputStream() ), så låser den
i det
> kald... dvs. Parsing data to xml file... bliver ikke udskrevet.

Jeg vil gætte på, at der mangler end of file på input.


Mvh,
--
Filip Larsen



René Iversen (24-02-2004)
Kommentar
Fra : René Iversen


Dato : 24-02-04 19:58


"Filip Larsen" <filip.larsen@nospam.dk> skrev i en meddelelse
news:c1g2up$dvc$1@news.cybercity.dk...
> René Iversen skrev
>
> > Jeg har følgende kode:
> >
> > *klip*
> >
> > Hvis jeg bruger den kode der er udkommenteret, modtager jeg fint
> teksten,
> > som er et XML dokument.
> > Men hvis jeg bruger db.parse( socket.getInputStream() ), så låser den
> i det
> > kald... dvs. Parsing data to xml file... bliver ikke udskrevet.
>
> Jeg vil gætte på, at der mangler end of file på input.
>
>

Hvordan fixer jeg det? Det har jeg ikke prøvet før.



Filip Larsen (24-02-2004)
Kommentar
Fra : Filip Larsen


Dato : 24-02-04 22:35

René Iversen skrev

> > Jeg vil gætte på, at der mangler end of file på input.

> Hvordan fixer jeg det? Det har jeg ikke prøvet før.

Den process der skriver til den socket du læser fra skal lukke sin ende
af forbindelsen når den er færdig med at skrive XML indholdet ud. Hvis
ikke du sender data den anden vej, så kan dette gøre med close, ellers
må du have fat i Socket.shutdownOutput() med efterfølgende close på
klientsiden når EOF er modtaget.

Et bedre, men mere kompliceret alternativ er at bruge en eller anden
form for pakke-protokol på dine data så klienten ved hvornår data er
slut. Fordelen er, at indlæsning kan gøres mere robust og, at
forbindelsen kan genbruges til flere pakker. Det kræver dog, at klienten
først læser på forbindelsen og gemmer data i en lokal buffer/fil indtil
en hel pakke er modtaget og først herefter kan den lokale buffer/fil
blive givet videre til læsere såsom XML-parsere osv. Den nye
java.nio.Channel pakke har forresten god support for buffer-håndtering
når man bruger længdeangivet pakker, så du kan måske blive inspireret
der.


Mvh,
--
Filip Larsen



René Iversen (25-02-2004)
Kommentar
Fra : René Iversen


Dato : 25-02-04 07:15


"Filip Larsen" <filip.larsen@nospam.dk> skrev i en meddelelse
news:c1gg36$1760$1@news.cybercity.dk...
> René Iversen skrev
>
> > > Jeg vil gætte på, at der mangler end of file på input.
>
> > Hvordan fixer jeg det? Det har jeg ikke prøvet før.
>
> Den process der skriver til den socket du læser fra skal lukke sin ende
> af forbindelsen når den er færdig med at skrive XML indholdet ud. Hvis
> ikke du sender data den anden vej, så kan dette gøre med close, ellers
> må du have fat i Socket.shutdownOutput() med efterfølgende close på
> klientsiden når EOF er modtaget.
>
> Et bedre, men mere kompliceret alternativ er at bruge en eller anden
> form for pakke-protokol på dine data så klienten ved hvornår data er
> slut. Fordelen er, at indlæsning kan gøres mere robust og, at
> forbindelsen kan genbruges til flere pakker. Det kræver dog, at klienten
> først læser på forbindelsen og gemmer data i en lokal buffer/fil indtil
> en hel pakke er modtaget og først herefter kan den lokale buffer/fil
> blive givet videre til læsere såsom XML-parsere osv. Den nye
> java.nio.Channel pakke har forresten god support for buffer-håndtering
> når man bruger længdeangivet pakker, så du kan måske blive inspireret
> der.
>

Tak skal du ha'... jeg prøver. Kan være jeg vender tilbage.



René Iversen (25-02-2004)
Kommentar
Fra : René Iversen


Dato : 25-02-04 08:47

Det virker fint... tak!



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409083
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste