Нет исходного кода для типа: Ошибка компиляции GWT - PullRequest
16 голосов
/ 03 марта 2012

Я пытаюсь получать запросы от сервлета в моем приложении GWT. При компиляции кода я получаю эти ошибки.

[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?

Что я должен сделать, чтобы удалить эти ошибки? Разве эти классы не поддерживаются GWT?

Ниже приведен код, который я использую

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");
}

Этот код работает нормально, если я использую его в обычном java-проекте / консольном приложении.

Ответы [ 7 ]

13 голосов
/ 23 февраля 2013

Если вы используете Maven, вы можете сделать это.

maven-gwt-plugin с параметром compileSourcesArtifacts выполнит всю работу по управлению источниками и позволит вамскомпилировать модуль GWT.

В модуле, который вы хотите включить, вам нужно будет включить генерацию исходного пакета .Взгляните на пример внешнего модуля GWT на Github .

GWT не может скомпилировать ни один класс Java для клиентского кода JavaScript.Он поддерживает только несколько базовых классов.См. Справочник по эмуляции GWT JRE .

Пример 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>
10 голосов
/ 04 марта 2012

Вы должны наследовать в своих * .gwt.xml необходимых модулях.

Как: <inherits name="module_name"/>

9 голосов
/ 04 марта 2012

Java-код, выполняемый в GWT, переводится на Javascript, поэтому некоторые классы, работающие на JVM, не будут работать с GWT.HttpClient и связанные классы написаны для работы на JVM с полной поддержкой открытия сокетов, что недопустимо в веб-браузере, поэтому эти классы использовать нельзя.

Чтобы открыть соединение с серверомвы используете (в соответствии с той же политикой браузера, что и в браузере), рассмотрите класс RequestBuilder, который позволяет предоставить URL-адрес и метод HTTP, а также, необязательно, заголовки, параметры, данные и т. д. Этот класс является абстракцией над объектом XmlHttpRequestJavaScript, обычно используемый для запросов AJAX в простом JS.

3 голосов
/ 05 марта 2012

Вы не можете использовать классы, которые не эмулируются GWT, в коде на стороне клиента, если вы не предоставите исходный код (это невозможно в вашем случае, когда вы пытаетесь использовать стороннюю библиотеку).Классы JRE: http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html

Прочтите эту исчерпывающую документацию по выполнению межсайтовых запросов в GWT: http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html

1 голос
/ 07 мая 2015

Ваш исходный код клиента может ссылаться на исходный код сервера.Просто попробуйте поместить исходный код вашего сервера в общий пакет.

0 голосов
/ 18 мая 2018

У меня была эта проблема.Это было вызвано тем, что интерфейсы RemoteService не были включены в пакет «Клиент» только в пакет проекта.

0 голосов
/ 20 июля 2014

Когда я получаю «исходный код недоступен ...» в диалоговом окне в Chrome при загрузке приложения GWT, наряду с ответами выше, я обнаружил 2 другие причины:

  1. Это означает, что мой код сервера относится к коду, которого нет в общих или серверных пакетах.(Компилятор не жалуется, но GWT делает. К сожалению, сообщение об ошибке НЕ полезно.)

  2. Я забыл предоставить конструктор без параметров для класса, который я передаю от клиента к серверу,(Т.е. я написал свой собственный конструктор с параметром, поэтому конструктор по умолчанию отсутствует.) GWT-RPC сериализует этот класс в фоновом режиме, а для десериализации требуется конструктор без параметров.Так что это проблема, и снова, сообщение об ошибке бесполезно и вводит в заблуждение.

...