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.

Author: Saurabh Saxena, 2012-03-03

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.

 9
Author: Colin Alworth,
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>
 12
Author: Viacheslav Dobromyslov,
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"/>

 9
Author: ArtemStorozhuk,
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

 3
Author: Strelok,
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.

 1
Author: user4875699,
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:

  1. 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.)

  2. 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.

 0
Author: i2B,
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.

 0
Author: user2258777,
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