OSM Composer: XMLStreamException: ParseError at ... Pemature EOF

Hallo,

beim Download von Kartendaten per OSM Composer (V0.81, Linux) sehe ich regelmäßig die folgende Fehlermeldung:


Downloading http://api.openstreetmap.org/api/0.6/map?bbox=11.799999999999997,49.70000000000001,11.8,49.8
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[4057,57]
Message: Premature EOF

Dementsprechend(?) weist die später generierte Karte eine ganze Reihe von “Löchern” auf, d.h., es fehlen in bestimmten Bereichen Straßen, Wege, usw. Was mache ich oder was macht der OSM Composer hier falsch?

Das weist auf unvollständige Daten durch abgebrochene Downloads hin.

Kann ich irgendwie genauere Information dazu generieren lassen? Ich sehe zwar ein paar wenige HTTP 400, aber das sind Statuscodes bei denen überhaupt keine Übertragung stattfindet – bis zur Zeile 4000undwas, wie oben in der Fehlermeldung genannt, reicht das nicht. :frowning:

Du findest mehr infos in der Datei errorlog.txt. Mit dem Stacktrace dazu könnte ich mehr sagen.

bye
Nop

Ups, auf meine Konsole hätte ich ja ruhig schauen können (schäm). Der 400er taucht dort wie folgt auf:


17.02.10 21:10 java.io.IOException: Server returned HTTP response code: 400 for URL: http://api.openstreetmap.org/api/0.6/map?bbox=11.2,49.300000000000004,11.299999999999999,49.400000000000006
17.02.10 21:10 Exception downloading: http://api.openstreetmap.org/api/0.6/map?bbox=11.2,49.300000000000004,11.299999999999999,49.400000000000006
java.io.IOException: Server returned HTTP response code: 400 for URL: http://api.openstreetmap.org/api/0.6/map?bbox=11.2,49.300000000000004,11.299999999999999,49.400000000000006
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1269)
        at java.net.URL.openStream(URL.java:1029)
        at nop.osm.DataSegment.gatherData(DataSegment.java:43)
        at nop.osm.DataDownloader$DataJob.run(DataDownloader.java:179)
        at java.lang.Thread.run(Thread.java:636)

Die Parser-Fehler kommen ja erst später:


17.02.10 21:14 javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1054,111]                               
Message: Premature EOF                                                                                               
17.02.10 21:14 Exception reading data from downloaded file                                                           
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1054,111]                                              
Message: Premature EOF                                                                                               
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:582)            
        at nop.osm.OSMInputFile.getNext(OSMInputFile.java:154)                                                       
        at nop.osmc.generator.RegionMapper.downloadRegion(RegionMapper.java:107)                                     
        at nop.osmc.generator.Mapper.generate(Mapper.java:186)                                                       
        at nop.osmc.MapComposer$12.act(MapComposer.java:361)                                                         
        at nop.gui.MenuThreadAction.run(MenuThreadAction.java:27)                                                    
        at java.lang.Thread.run(Thread.java:636)                                                                     

Im Log steht ja in diesem Fall das Gleiche drin.

Merkwürdig. Ich glaube nicht, daß die beiden zusammenhängen.

Ein Code 400 bedeutet, daß die angefragte Region zu groß ist. Dabei werden aber gar keine Daten geschickt, daß heißt es sollte auch kein verstümmeltes File entstehen können.

bye
Nop

Die Anfrage für oben genannte URL liefert mir mit HTTP Code 400:
Content-Type: text/html
Error: You requested too many nodes (limit is 50000). Either request a smaller area, or use planet.osm
Transfer-Encoding: chunked
Date: Thu, 18 Feb 2010 00:49:17 GMT
Server: lighttpd/1.4.22

Bad Request

You requested too many nodes (limit is 50000). Either request a smaller area, or use planet.osm

Es werden dabei offensichtlich Daten geschickt – nämlich die Fehlermeldung. Jedoch scheinen die beiden Exceptions nichts miteinander zu tun zu haben weil sich die Uhrzeiten unterscheiden und außerdem keine Zeile 1054 in der Fehlermeldung vom Server existiert.

Kannst du den Inhalt der Datei lesen bei der Xerces abbricht? Falls ja, wie lauten die letzten Zeilen?

Wenn ich wüsste, auf welcher Datei Xerces konkret dann arbeitet, könnte ich da weitere Informationen geben. Hier müsste mir Nop mit Informationen helfen, wie ich das verfolgen kann. Wenn das jetzt Open Source wäre, dann hätte ich schon längst Eclipse angeworfen und selbst nachverfolgt, aber so muss das halt wieder Stille Post werden. :wink:

Hallo,

ich kann oben genannte Fehler von WrongWayGC ebenfalls bestätigen. Ich versuche schon seit Tagen vergeblich mit dem OSM Composer 0.81 eine aktuelle Karte von Madeira zu erstellen.

Parser-Fehler kommen nur manchmal vor, aber nach bzw während des Downloads des letzten Bereichs erscheint immer der nachfolgende BufferUnderflow-Fehler.

Gleicher Fehler tritt immer wieder auch bei anderen Regionen (z.B. Kanarische Inseln) auf. Hier konnte ich mir helfen, indem ich die OSM-Daten von der Seite GeoFabrik heruntergeladen habe, die Datei in den Input-Ordner von OSM Composer kopiert habe und die Datei entsprechend umbenannt habe. Danach läuft der Composer mit den Einstellungen “Kartendaten bei Bedarf laden” durch und erstellt die gewünschte Karte vollständig.

Nächster Test war, die OSM-Daten des gewünschten Kartenausschnitts mit GroundTruth herunterzuladen und als Input-File für den Composer zu verwenden. GroundTruth lädt zwar den Bereich ohne Fehlermeldung, jedoch ist die danach mit dem Composer erstellte Karte ebenfalls fehlerhaft.

Scheint also kein Fehler des Composers zu sein, sondern ein Fehler des Download-Servers.

Das muss im engen Sinne auch kein Fehler des OSM-Composers sein. Allerdings wäre es schön, wenn wir den Fehler einkreisen und dann ggf. einen Fehlerreport “upstream” schicken könnten, sofern die Ursache bei den OSM-Servern liegt. Damit wäre dann ja gleich allen geholfen.

Ich habe nun noch einen Test gemacht, der zu einem positiven Ergebnis führte. Der Bereich der Hauptinsel Madeira ist klein genug für einen Direkt-Download der OSM-Daten von der Karte. Auch dieser Test verlief positiv. Nachdem ich die heruntergeladene OSM-Datei in den Input-Ordner kopiert habe und die Bereichsdaten angepasst habe erstellt der Composer eine vollständige Karte.

Es ist zu vermuten, dass der Composer und auch GroundTruth die gleiche Methode zum Download der Bereiche verwendet, die letztendlich für die auftretenden Fehler verantwortlich ist. Die GeoFabrik verwendet ein anderes Verfahren für die Erstellung ihrer Karten und die sind ok.

Leider fehlt mir dazu die nähere Kenntnis. Vielleicht kann Nop mehr dazu sagen.