Jarek W. Software Engineer
Temat: Problem z aplikacją GWT + Google Maps + KML + GAE
Witam,Mam problem z aplikacją w GWT (Google Web Toolkit) na GAE (Google App Engine), która wykorzystuje KML generowany przez serwlet HTTP do nanoszenia tras na mapę. Dane są następujące:
KML jest generowany przez serwlet:
...
public void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
response.getOutputStream().println(getSampleKml());
} catch(Exception e) {
}
}
private String getSampleKml() {
...//zwraca plik KML postaci: http://jarekwalkiewicz.pl/public/points.kml
}
...
Klient (GWT) wygląda tak (w skrócie):
...
private final static String GOOGLE_MAPS_API_KEY = "...";
private final static Float BEGIN_LAT = new Float(52.15);
private final static Float BEGIN_LNG = new Float(21.0);
private final static int ZOOM_LEVEL = 12;
private MapWidget map;
...
Maps.loadMapsApi(GOOGLE_MAPS_API_KEY, "2", false, new Runnable() {
public void run() {
map = new MapWidget(LatLng.newInstance(BEGIN_LAT.floatValue(), BEGIN_LNG.floatValue()), ZOOM_LEVEL);
map.setSize("640px", "480px");
map.addControl(new LargeMapControl());
mapPanel.add(map);
}
});
...
String url = "..."; //<-- TO JEST WAŻNE
GeoXmlOverlay.load(url, new GeoXmlLoadCallback() {
@Override
public void onFailure(String url, Throwable caught) {
}
@Override
public void onSuccess(String url, GeoXmlOverlay overlay) {
map.addOverlay(overlay);
overlay.setVisible(true);
}
});
...
I teraz tak:
1) Jeśli url == "http://jarekwalkiewicz.pl/public/points.kml", to na mapę jest nanoszona odpowiednia trasa - wszystko jest okej.
2) Jeśli url == "http://xxxxxx.appspot.com/service/kml" (nie chcę podawać rzeczywistej nazwy aplikacji), to na mapę nie jest nanoszona trasa (następuje wejście do onFailure, choć Throwable caught jest null).
Oczywiście na pewnym zdarzeniu występuje wysłanie żądania pobrania tego KMLa. Odpowiedzi widoczne w Firebug są następujące:
Przypadek 1)
_xdc_._3goh1262o && _xdc_._3goh1262o({"name":"http://jarekwalkiewicz.pl/public/points.kml","Status":{"code":200,"request":"geoxml"},viewport: {center: {lat: 52.219500,lng: 21.022500},span: {lat: 0.139000,lng: 0.045000}},"kmlOverlay":{tileUrlBase:"/mapsdt?id=http://jarekwalkiewicz.pl/public/points.kml",force_mapsdt:false,geViewable:true,name:"Test",description:"Testowe punkty",polylines:[{id:"A",fid:"g313a16e70c1429df",name:"Jarek Walkiewicz",description:"",points:"oph}H_qd_Cod@oKoKoK?wQgEgE_wQ_XoKod@oK_q@oKgEgw@oKgEgEod@gE_Xg^?_q@gEgEwj@?",levels:"B@@@@A?A?@@@@@@B",numLevels:4,zoomFactor:16,weight:4,color:"#ff0000",opacity:1,snippet:""}],layer_id:"kml:cO64pz4jBDEZpbGphuGqRs30leGSyPBI",server_version:3,server_options:"F"}})
Przypadek 2)
_xdc_._3goh1262o && _xdc_._3goh1262o({"name":"http://xxxxxx.appspot.com/service/kml","Status":{"code":200,"request":"geoxml"}})
Wygląda na to, że brakuje części w odpowiedzi do przypadku 2). I teraz pytanie: dlaczego? Czy chodzi o to, że serwlet jest w chmurze na GAE? Generalnie jak się bezpośrednio do niego odwołam z przeglądarki, to jest zwracana oczekiwana treść. Natomiast "nie potrafi" jej pobrać klient GWT. Co robię źle? Jakie jest na to rozwiązanie? Spotkał się ktoś w ogóle z takim problemem wcześniej? Wszelkie (p)odpowiedzi mile widziane.
Pozdrawiam,
JarekJarek W. edytował(a) ten post dnia 03.06.11 o godzinie 14:09