Brak kodu źródłowego dla typu: GWT Compilation Error
Próbuję złożyć żądania get przez servlet w mojej aplikacji GWT. Przy kompilacji kodu dostaję te błędy.
[ERROR] Line 16: No source code is available for type org.apache.http.client.ClientProtocolException; did you forget to inherit a required module?
[ERROR] Line 16: No source code is available for type org.apache.http.ParseException; did you forget to inherit a required module?
[ERROR] Line 16: No source code is available for type org.json.simple.parser.ParseException; did you forget to inherit a required module?
Co zrobić, aby usunąć te błędy? Czy te klasy nie są obsługiwane przez GWT?
Poniżej znajduje się kod, którego używam
public String getJSON() throws ClientProtocolException, IOException, ParseException{
HttpClient httpclient = new DefaultHttpClient();
JSONParser parser = new JSONParser();
String url = "some - url - can't disclose";
HttpResponse response = httpclient.execute(new HttpGet(url));
JSONObject json_data = (JSONObject)parser.parse(EntityUtils.toString(response.getEntity()));
JSONArray results = (JSONArray)json_data.get("result");
}
Ten kod działa dobrze, jeśli używam go na zwykłym projekcie java / aplikacji konsolowej.
7 answers
Kod Javy działający w GWT jest tłumaczony na Javascript, więc niektóre klasy działające na JVM nie będą działać z GWT. HttpClient i powiązane klasy są napisane do pracy na JVM z pełną obsługą otwierania gniazd, coś, co nie jest dozwolone w przeglądarce internetowej, więc te klasy nie mogą być używane.
Aby otworzyć połączenie z serwerem, którego używasz (z zastrzeżeniem tej samej zasady pochodzenia przeglądarki), rozważ klasę RequestBuilder, która pozwala na podanie adresu url i metody HTTP, oraz opcjonalnie nagłówki, parametry, dane itp. Ta klasa jest abstrakcją nad obiektem XmlHttpRequest w JavaScript, powszechnie używaną dla żądań AJAX w prostym JS.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-04 00:33:27
Jeśli używasz Mavena, możesz to zrobić.
Maven-gwt-plugin z parametrem compileSourcesArtifacts wykona wszystkie prace związane z zarządzaniem źródłami i pozwoli Ci skompilować moduł GWT.
W module, który chcesz dołączyć, musisz włączyć generowanie pakietu źródłowego . I spójrz na external GWT module przykład na Github.
GWT nie może skompilować żadnej klasy Java do kodu klienta JavaScript. Obsługuje tylko kilka baz klasy. Zobacz odniesienie do emulacji GWT JRE .
Przykład pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<dependencies>
<dependency>
<groupId>com.my.group</groupId>
<artifactId>my-artifact</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<!-- ... -->
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.5.0</version>
<!-- ... -->
<configuration>
<compileSourcesArtifacts>
<compileSourcesArtifact>com.my.group:my-artifact</compileSourcesArtifact>
</compileSourcesArtifacts>
</configuration>
</plugin>
</plugins>
</build>
</project>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-25 02:17:51
Musisz dziedziczyć w swoim * .gwt.XML potrzebne moduły.
Like: <inherits name="module_name"/>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-03 20:29:50
Nie możesz używać klas, które nie są emulowane przez GWT w kodzie po stronie klienta, chyba że podasz kod źródłowy(niemożliwe w Twoim przypadku, ponieważ próbujesz użyć biblioteki innej firmy).
Lista wszystkich emulowanych klas JRE: http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html
Zapoznaj się z obszerną dokumentacją dotyczącą składania żądań między Stronami w GWT: http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-05 00:24:11
Twój kod źródłowy klienta może odnosić się do kodu źródłowego serwera. Po prostu spróbuj umieścić kod źródłowy serwera w udostępnionym pakiecie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 15:36:53
Kiedy dostanę "żaden kod źródłowy nie jest dostępny..."w oknie dialogowym w Chrome podczas ładowania aplikacji GWT, wraz z powyższymi odpowiedziami znalazłem 2 inne przyczyny:
Oznacza to, że mój kod serwera odnosi się do kodu, który nie znajduje się w pakietach udostępnionych lub serwerowych. (Kompilator nie narzeka, ale GWT tak. Niestety komunikat o błędzie nie jest pomocny.)
Zapomniałem dostarczyć bez parametru konstruktora dla klasy, którą przechodzę z Klienta na serwer. (Tzn. napisałem własną konstruktor z parametrem, więc nie ma konstruktora domyślnego.) GWT-RPC serializuje tę klasę w tle, a deserializacja wymaga konstruktora bez parametru. Więc to jest problem i znowu komunikat o błędzie jest nieprzydatny i wprowadzający w błąd.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-20 12:40:06
Miałem taki problem. Było to spowodowane tym, że interfejsy RemoteService nie były zawarte w pakiecie "Klient" tylko w pakiecie projektu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-18 13:14:31