2012-03-03 89 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

您的客戶端源代碼可能引用服務器源代碼。試着將你的服務器源代碼放在一個共享的包中。

相關問題