我正在尝试通过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项目/控制台应用程序上使用它。
答案 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中的对话框中显示“没有源代码可用...”,以及上述答案后,我发现了其他两个原因:
这意味着我的服务器代码指的是不在共享或服务器包中的代码。 (编译器不会抱怨,但GWT会这样做。不幸的是,错误消息没有帮助。)
我忘了为从客户端传递到服务器的类提供无参数构造函数。 (即我用参数编写了自己的构造函数,因此没有默认构造函数。)GWT-RPC在后台序列化此类,反序列化需要无参数构造函数。这就是问题所在,而且错误信息也是无益的,也是误导性的。
答案 6 :(得分:0)
我有这个问题。这是因为RemoteService接口仅包含在项目包中的“Client”包中。