2012-03-03 99 views
13

我想通过我的GWT应用程序中的servlet获取请求。在编译代码时,我收到了这些错误。没有源代码可用于输入: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项目/控制台应用程序。

回答

9

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

要打开到您正在使用的服务器的连接(受浏览器相同的原始策略限制),请考虑RequestBuilder类,它允许您提供url和HTTP方法,以及可选的标头,参数,数据等。这个类是对JavaScript中XmlHttpRequest对象的抽象,通常用于纯JS中的AJAX请求。

9

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

像:在GWT运行<inherits name="module_name"/>

11

如果你使用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> 
0

当我得到“没有源代码可用......”在对话框在Chrome在加载GWT应用程序,与上面的答案一起,我发现其他2病因:

  1. 这意味着我的服务器代码是指不在共享或服务器软件包中的代码。 (编译器不会抱怨,但GWT可以。不幸的是,错误信息是没有用的。)

  2. 我忘记为我从客户端传递到服务器的类提供无参数构造函数。 (也就是说,我用自己的构造函数编写了一个参数,所以没有默认构造函数)。GWT-RPC在后台序列化这个类,并且反序列化需要一个无参数的构造函数。所以这就是问题所在,并且错误信息再一次没有帮助和误导。

1

您的客户端源代码可能引用服务器源代码。试着将你的服务器源代码放在一个共享的包中。