没有源代码可用于类型:GWT编译错误

2022-09-02 12:03:43

我正在尝试在我的GWT应用程序中通过servlet发出获取请求。在编译代码时,我收到这些错误。

[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项目/控制台应用程序上使用它,则此代码工作正常。


答案 1

在GWT中运行的Java代码被翻译成Javascript,因此一些在JVM上工作的类将无法与GWT一起使用。HttpClient 和相关类被编写为在完全支持打开套接字的 JVM 上工作,这在 Web 浏览器中是不允许的,因此不能使用这些类。

要打开与您正在使用的服务器的连接(受浏览器同源策略的约束),请考虑 RequestBuilder 类,它允许您提供 url 和 HTTP 方法,以及可选的标头、参数、数据等。此类是对 JavaScript 中 XmlHttpRequest 对象的抽象,通常用于普通 JS 中的 AJAX 请求。


答案 2

如果你使用Maven,那么你可以这样做。

带有参数编译的maven-gwt-pluginSourcesArtifacts将完成所有源代码管理工作,并允许您编译GWT模块。

在要包含的模块中,必须启用源包的生成。看看Github上的外部GWT模块示例

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>