2011-06-24 16 views
4

RESTには新しく、外部ホスティングサービスにデータを送信するクライアントを開発中です。イムは長さが必要(411) - RESTletクライアントに必要な長さ

Representation rep = new JsonRepresentation(json); 
    rep.setMediaType(MediaType.APPLICATION_JSON); 
    rep.setCharacterSet(CharacterSet.UTF_8); 

    ClientResource clientResource = getClientResource(); 
    Representation reply = clientResource.post(rep); 
    return readResponseStream(reply, clientResource); 

しかし、私は次のエラーを取得するクライアントに作成するorg.reslet.resource.ClientResourceを使用して、同じコードが

Representation reply = clientResource.get(); 

私は」get要求のために働く

Exception in thread "main" Length Required (411) - Length Required 
at org.restlet.resource.ClientResource.handle(ClientResource.java:858) 
at org.restlet.resource.ClientResource.post(ClientResource.java:1197) 
at org.mine.client.impl.RestClient.post(RestClient.java:59) 

reslet API 2.0.8を使用しています。これは私がクラスパスに次のjarファイルを持っているポストorg.restlet: Posting JSON content against webservice returns HTTP error 411 (length required)

で問題

org.apache.commons.codec.jar org.apache.commons.logging.jar org.apache.httpclient.jar org.apache.httpcore.jar org.json.jar org.restlet.ext.json.jar org.restlet.jar 

のように思える任意の助けいただければ幸いです。

+1

、フィドラーを実行してみてください。これは、それを比較する別の働く呼び出しがある場合に特に役立ちます。 http://www.fiddler2.com/fiddler2/ –

答えて

5

GAEはHTTPチャンクエンコーディングをサポートしていないため、シリアル化されたオブジェクトはGAEサーバーに(POSTまたはPUT経由で)送信できません。 Restlet Frameworkバージョン2.1 M4では、チャンクエンコーディングを防ぐためにHTTPエンティティをバッファリングする回避策があります。これを使用するには、ClientResource#setRequestEntityBuffering(boolean)メソッドを "true"の値で呼び出します。この回避策は、GWTエディションでは必要ありません。

あなたがのRestlet 2.0.8を使用しているように、私はあなたがここで公開回避策を使用することをお勧め:あなたは、Windowsを使っているのであれば、要求をしながらhttp://restlet.tigris.org/issues/show_bug.cgi?id=1219

敬具、 ティエリーBoileauの

+1

Cloudbeesで同じアペン、トリックのおかげで(https://cloudbees.zendesk.com/entries/20889467-error-411-length-required) – Martin

+0

@Martin That's CloudbeesはAppEngineを実行するGoogleのパートナーであるため、https://cloud.google.com/partners/です。 この回答はとても具体的でした。 AppEngineは言及されていませんでしたが、それは正しい解決策でした! – Chloe

関連する問題