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

时间:2012-03-03 19:50:48

标签: java json gwt httpresponse http-get

我正在尝试通过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项目/控制台应用程序上使用它。

7 个答案:

答案 0 :(得分:13)

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

参数maven-gwt-plugin

compileSourcesArtifacts将完成所有源代码管理工作,并允许您编译GWT模块。

在您要包含的模块中,您必须enable the generation of source package。并查看external GWT module example on Github

GWT无法将任何Java类编译为JavaScript客户端代码。它只支持几个基类。请参阅GWT JRE Emulation Reference

示例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>

答案 1 :(得分:10)

您必须继承* .gwt.xml 所需的模块。

赞:<inherits name="module_name"/>

答案 2 :(得分:9)

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

要打开与您正在使用的服务器的连接(根据浏览器Same Origin Policy),请考虑RequestBuilder类,它允许您提供URL和HTTP方法,以及可选的标头,参数,数据等。这个类是JavaScript中XmlHttpRequest对象的抽象,通常用于普通JS中的AJAX请求。

答案 3 :(得分:3)

除非您提供源代码(在您尝试使用第三方库时不可能),否则您不能在客户端代码中使用未通过GWT模拟的类。

所有模拟JRE类的列表:http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html

阅读这篇关于在GWT中发出跨站点请求的综合文档:http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html

答案 4 :(得分:1)

您的客户端源代码可能引用服务器源代码。只需尝试将服务器源代码放在共享包中。

答案 5 :(得分:0)

当我在加载GWT应用程序时在Chrome中的对话框中显示“没有源代码可用...”,以及上述答案后,我发现了其他两个原因:

  1. 这意味着我的服务器代码指的是不在共享或服务器包中的代码。 (编译器不会抱怨,但GWT会这样做。不幸的是,错误消息没有帮助。)

  2. 我忘了为从客户端传递到服务器的类提供无参数构造函数。 (即我用参数编写了自己的构造函数,因此没有默认构造函数。)GWT-RPC在后台序列化此类,反序列化需要无参数构造函数。这就是问题所在,而且错误信息也是无益的,也是误导性的。

答案 6 :(得分:0)

我有这个问题。这是因为RemoteService接口仅包含在项目包中的“Client”包中。