1

私が構築した Web サービスがあります... 私が今しようとしているのは、JSON クエリ文字列を含む単純な要求をタペストリー Web アプリからその Web サービスに送信することです。私は周りを検索しましたが、ほとんどの人はこれを達成するために Apache HttpClient を使用すると言っています。HttpClient とともに、URIBuilder を使用しています。

送信しようとしているJsonオブジェクトは次のようになります

{"user":{"userEmail":"jdoe@gmail.com","firstName":"John","lastName":"Doe","phone":"203- 555-5555"},"password" :"死"}

*パスワードがプレーンテキストで送信されるなどの問題を認識しています...

機能する URL (Web ブラウザーに手動で入力することによってテストされ、この Web サービスは既に Android クライアントと iOS クライアントにサービスを提供しています) は次のようになります。

http:// ##.##.###.##/createuser?json={"user":{"userEmail":"jdoe@gmail.com","firstName":"John","lastName" :"Doe","phone":"203-555-5555"},"password":"dead"}

これは、なぜこれがうまくいかないのかを理解しようとして、Google で検索してまとめた HttpClient コードです。基本的に、私がやろうとしているのは、URIBuilder で URI を作成し、新しく構築された URI で HttpPost または HttpGet オブジェクトを構築することです。しかし、URIBuilding プロセスで何か問題が発生しています。デバッグ時に、URI のすべての側面を設定しようとすると例外がスローされます。

Object onSuccess() throws ClientProtocolException, IOException, URISyntaxException{
    // json = {"user":{"userEmail":"jdoe@gmail.com","firstName":"John","lastName":"Doe","phone":"203- 555-5555"},"password":"dead"}
    String json = user.toJson();
    URIBuilder builder = new URIBuilder();
    // Error gets thrown when I step over the next line
    builder.setScheme("http").setHost("##.###.##.###").setPort(8080).setPath("createuser").setQuery("json=" +json); 
    URI uri = builder.build();

    HttpPost request = new HttpPost(uri);
    DefaultHttpClient httpClient = new DefaultHttpClient();
    String tmp = request.getURI().toString();

    HttpResponse response = httpClient.execute(request); 
    index.setResponse(EntityUtils.toString(response.getEntity()));
    return index;

コードでコメントした行をまたぐと戻ってくるエラーは

[エラー] TapestryModule.RequestExceptionHandler リクエストの処理がキャッチされない例外で失敗しました:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/util/List; java.lang.NoSuchMethodError:org.apache.http.client.utils.URLEncodedUtils.parse(Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/util/List;

このリクエストをサーバーに正しく送信するために、メソッドとオブジェクトの他の多くの組み合わせを試しましたが、何も機能していないようです。うまくいけば、私は比較的単純なものを見落としています。

あなたが提供できるガイダンスを前もって感謝します。

4

1 に答える 1

1

クラスパスに apache httpcomponents のバージョンが間違っているか、2 つのバージョンがある可能性があります。Tapestry を実行している場合、クラスパス上のすべてのパッケージがエラー ページに出力されます。そこを調査し、ロードされている httpcomponents を見つけ、それがどこから来たのかを突き止めて修正します。

これがうまくいかない場合は、ランタイム環境の一部を私たちと共有してください。どのサーブレット エンジンをどの IDE から実行しているか、またはコマンド ラインから実行しているか。Mavenを使用していますか?もしそうなら、あなたのポンを共有してください。等。

于 2012-08-10T07:32:20.487 に答える