私のGWTアプリケーションでサーブレットによるgetリクエストを作成しようとしています。コードをコンパイルすると、これらのエラーが発生します。
[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プロジェクト/コンソールアプリケーションで使用すると、.
GWTで実行されるJavaコードはJavascriptに変換されるため、JVMで動作する一部のクラスはGWTで動作しません。 HttpClientと関連クラスは、ソケットのオープンを完全にサポートするJVMで動作するように作成されています。これは、Webブラウザーでは許可されていないため、これらのクラスは使用できません。
使用しているサーバーへの接続を開くには(ブラウザーの同じ生成元ポリシーに従う必要があります)、URLとHTTPメソッド、およびオプションでヘッダー、パラメーター、データなどを提供できるRequestBuilderクラスを検討してください。このクラスはJavaScriptのXmlHttpRequestオブジェクトを抽象化したもので、通常AJAXリクエストがプレーンなJSで使用されます。
Mavenを使用している場合は、これを実行できます。
maven-gwt-plugin パラメータ付き compileSourcesArtifacts はすべてのソース管理作業を行い、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>
* 。gwt.xml必要なモジュールを継承する必要があります。
お気に入り: <inherits name="module_name"/>
ソースコードを提供しない限り、クライアント側のコードでGWTによってエミュレートされていないクラスを使用することはできません(サードパーティのライブラリを使用しようとしているため不可能です)。
エミュレートされたすべてのJREクラスのリスト: http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html
GWTでのクロスサイトリクエストの作成に関する包括的なドキュメントをお読みください: http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html
クライアントのソースコードがサーバーのソースコードを参照している可能性があります。サーバーのソースコードを共有パッケージに配置してみてください。
私はこの問題を抱えていました。これは、RemoteServiceインターフェイスがプロジェクトパッケージの「クライアント」パッケージにのみ含まれていないことが原因でした。
Chrome)のダイアログで、GWTアプリのロード中に「ソースコードが利用できません...」と表示された場合、上記の回答とともに、他に2つの原因が見つかりました。
これは、私のサーバーコードが共有パッケージまたはサーバーパッケージに含まれていないコードを参照していることを意味します。 (コンパイラーは文句を言いませんが、GWTは文句を言います。残念ながらエラーメッセージは役に立ちません。)
クライアントからサーバーに渡すクラスにパラメーターのないコンストラクターを指定するのを忘れました。 (つまり、独自のコンストラクターをパラメーター付きで作成したため、デフォルトのコンストラクターはありません。)GWT-RPCはこのクラスをバックグラウンドでシリアル化しており、非シリアル化にはパラメーターなしのコンストラクターが必要です。これが問題です。繰り返しになりますが、エラーメッセージは役に立たず、誤解を招くものです。