Verbindungsprobleme bei verwendung von Google

Hi,
ich hab endlich mal wieder bisschen Zeit gefunden um an meinem einen Projekt zu arbeiten.
Aber auf einmal funktioniert es nicht mehr richtig. Rufe ich die Generierung von einer KML Datei direkt auf funktioniert alles wunderbar, geb ich diese URL aber Google klappt das nicht, ich erhalte eine Exception auf dem Server beim Schreiben der Daten “Connection reset by peer”.
Habt ihr eine Idee woran das liegen kann bzw was ich dagegen machen kann?

Moin :slight_smile:

Schön … und was ist denn dein Projekt?

[QUOTE=EagleEye;9950]Aber auf einmal funktioniert es nicht mehr richtig. Rufe ich die Generierung von einer KML Datei direkt auf funktioniert alles wunderbar, geb ich diese URL aber Google klappt das nicht, ich erhalte eine Exception auf dem Server beim Schreiben der Daten „Connection reset by peer“.
Habt ihr eine Idee woran das liegen kann bzw was ich dagegen machen kann?[/QUOTE]

Und der Code ist?

[QUOTE=The_S;9951]Moin :slight_smile:

[/quote]
Morgäääään :smiley:

Schön … und was ist denn dein Projekt?

ich weiß nicht ob ich dir davon mal erzählt hab, das wird ein kleines Webportal in dem man GPS Tracks hochladen kann die dann mit Google Maps dargestellt werden. Dazu kommen dann noch andere kleine Spielereien.

Und der Code ist?

der ist ganz simpel, ich hab ihn gerade nicht da aber ich hatte gesetern testweise sowas hier geschrieben was schon die Exception produziert hat

ByteArrayOutputStream stream = new ByteArrayOutputStream();
//Mein KML Writer packt die Daten in den Stream
stream.flush();
stream.close();
resp.getOutputSteram().write(stream.getBytes());

und bei dem Write unten knallt es dann, normalerweise schreib ich direkt in den Stream vom Response aber zum Zeigen das es nicht an meinem KML Teil liegt hab ich das auch mal so ausprobiert.

Ups hab gerade gesehen das ich komplett vergessen hab zu schreiben das alles in einem Servlet abläuft.

Aber ne genauere Exception wird nicht geworfen?

Ich kann dir den genauen Stacktracke nachher mal geben, aber im Grund steht da nur “Connection reset by peer”

So hier die Exception

ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
	at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
	at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
	at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
	at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:83)
	at de.eagleside.geoeye.servlet.DownloadServlet.doPost(DownloadServlet.java:122)
	at de.eagleside.geoeye.servlet.DownloadServlet.doGet(DownloadServlet.java:69)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.SocketException: Connection reset by peer: socket write error
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
	at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
	at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
	at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:570)
	at org.apache.coyote.Response.doWrite(Response.java:560)
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
	... 21 more

Hm … Google scheint nicht zu warten, bis du fertig bist. Setzt du denn die Größe korrekt? Also bspw

response.setContentLength(stream.getBytes().length)

Mit der Schnittstelle selbst habe ich leider keine Erfahrung :frowning:

hmmmm, gute Idee kann ich mal ausprobieren.
Was mich halt nur wundert ist das es “früher” ging (vor 2 Monaten oder so)

Evtl. hat Google ja was an der Implementierung der Schnittstelle geändert.

Ne die Rufen das ja normal per HTTP auf, das seh ich ja auch an meinem Server. Aber dasm it der Länge ist ne gute Idee

Google ruft deinen Server auf :eek: ???

Jep, entweder wenn ich die URL in Google Maps eingebe oder per Java Script API Google sage die sollen die aufrufen.

achso, jetzt bin ich dabei - zumindest halbwegs … irgendwie … glaub ich :stuck_out_tongue_winking_eye:

hab die Contentlength jetzt gesetzt, aber der Fehler kommt immer noch

Nochmal zum Verständnis (da ich von der Google Technologie wie gesagt keine Ahnung habe):

Du gibst in irgendeinem Google-Dienst die URL zu deinem Servlet an, welches dynamisch eine KML-Datei erzeugt (was auch immer das ist). In diesem Fall bekommst du den Fehler!?

Wenn du Google allerdings die Adresse zu einem bereits fertigen KML gibst, dann funktioniert alles?

Wie lange dauert das Erzeugen der KML-Datei denn?

so fast
ich hab ein Servlet, das erzeugt mir eine KML (XML Datei mit GEO Informationen)
Rufe ich die Adresse direkt im Browser auf wird sie mir angezeigt und alles ist super, gebe ich diese URL aber z.B. Google Maps bekomm ich den Fehler (Beispiel Statische Datei)

Das Erzeugen dauert ein wenig aber länger als 1s dauert es eigentlich nicht, ich werd die Tage mal probieren ne andere KML zu erzeugen was dann passiert.

Wenn der Aufruf im Browser geht, dann liegts wohl eindeutig an Google (oder an einer fehlerhaften KML-Datei).

Noch ne ganz banale Idee: Endet die Servlet-URL mit der Endung “.kml”? Evtl. will Google ja zwingend diese Endung haben!? Kenne dieses Phänomen in Kombination mit dem Internet Explorer und dynamisch erzeugten Excel-Sheets.

Ja irgendwas muss bei Google los sein das sie das nicht mehr mögen, hätte ich am Wochenende nicht Anno 1701 ausgegraben gäbe es bestimmt schon neue Tests :smiley:
Ich werd das alles mal mit anderen GPS Daten ausprobieren was dann raus kommt, weil mit ner fast leeren Datei hatte es glaube geklappt, blöderweise stand in der nur als Koordinaten 0,0 drin :smiley:

So modern? Wenn ich ein Anno ausgrab, dann 1602. Das ist noch immer das coolste der Anno-Reihe :wink:

hehe ich hab aber gerade das entdeckt :wink: