2016-08-12 9 views
0

チャンクでPOSTコールチャンクにデータストリームを書き込むJersey 2クライアントを作成したかったのですが、Jersey 2 POSTへのデータストリームをチャンクで呼び出すクライアント

なぜですか?これは、POSTコールを介して送信する前に、入力ストリーム全体の要求データをディスクメモリに保存するのを避けるのに役立ちます。

私はネットで検索し、Jersey2 APIも調べましたが、解決策は見つかりませんでしたが、GETコールを実行してストリームで巨大な応答を送信し、Jerseyクライアントで同じメッセージを読み取るサーバー側のソリューションクライアントでは、私は巨大なペイロードを送信するには、1 GBのXMLデータをストリームのPOST POSTコールとして送信する必要がありました。

私はhereで与えられた解決策を試しましたが、この解決策は再びシステムメモリを使用します。

私はディスクに1GBのデータを保存するのではなく、オンザフライでデータの1GB要求ストリームを作成し、1GBデータをチャンクで直接チャンクにPOST呼び出しに書き込みます。

ご協力いただきありがとうございます。 ありがとうございました。

答えて

1

多くの研究を行った後、私は解決策を見つけたし、ここでそれが行く:

public class JerseyStreamingOutput implements StreamingOutput { 




    /** 
    * Overriding the write method to write request data directly to Jersey outputStream . 
    * @param outputStream 
    * @throws IOException 
    * @throws WebApplicationException 
    */ 
    @Override 
    public void write(OutputStream outputStream) throws IOException, WebApplicationException { 

     // Write to Jersey OutputStream chunk by chunk here 
    } 
} 

ジャージー効率の良いコード:後述するように

まずたちはjavax.ws.rs.core.StreamingOutputを実装する必要が

JerseyStreamingOutput jerseyStreamingOutput = 
       new JerseyStreamingOutput(); 
     WebTarget target = client.target("http:localhost:8080"); 
     response = target.path("/somepath"). 
       request().post(Entity.entity(jerseyStreamingOutput, MediaType.APPLICATION_OCTET_STREAM_TYPE)); 

したがって、上記の解決策はhチャンクでリクエストチャンクをoutputStreamに書き込むことで、ディスクの空き容量を増やすことができます。この方法を使用しないと、リクエストxmlファイルをハードディスクに保存することになります。

関連する問題