Подтвердить что ты не робот

Нет исходного кода для типа: Ошибка компиляции GWT

Я пытаюсь получить запросы сервлетом в своем приложении 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-проекте/консольном приложении.

4b9b3361

Ответ 1

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

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

Ответ 2

Если вы используете 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>

Ответ 3

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

Нравится: <inherits name="module_name"/>

Ответ 4

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

Список всех эмулируемых классов JRE: http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html

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

Ответ 5

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

Ответ 6

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

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

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