2017-01-05 4 views
2

で働いていない誰も私を助けることができます([開くページhttp://jerseyexample-ravikant.rhcloud.com/rest/jwsとF12を押し、他のドメインから許可されていませんjavascriptのコールとして、コンソールに以下の実行)はChunkedInputはジャージー

//2 is to increase amount of data and 3(seconds) is for time b/w chunked output ,can be changed 

var xhr = new XMLHttpRequest() 
xhr.open("GET", "http://jerseyexample-ravikant.rhcloud.com/rest/jws/streaming/2/3", true) 
xhr.onprogress = function() { 
    console.log("PROGRESS:", xhr.responseText) ;console.log("\n"); 
} 
xhr.send() 

EDIT:ちょうど助け、それのためにまた、意志通常のJava接続

 String uri = "http://jerseyexample-ravikant.rhcloud.com/rest/jws/streaming/3/1"; 
     URL url = new URL(uri); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("GET"); 
     connection.setDoOutput(true); 
     BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
     String line; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
     in.close(); 

マイWebServiceのコード

@Path("streaming/{param}/{sleepTime}") 
@GET 
@Produces(MediaType.TEXT_PLAIN) 
public ChunkedOutput<String> getChunkedStream(@PathParam("param") String loopcount,@PathParam("sleepTime") String sleepTime) throws Exception { 

    final ChunkedOutput<String> output = new ChunkedOutput<>(String.class); 
    final Integer val=Integer.parseInt(loopcount); 
    final Integer isleepTime=Integer.parseInt(sleepTime)*1000; 
    new Thread(new Runnable() { 

     @Override 
     public void run() { 
      try { 
       StringBuffer chunk = null; 

       for (int i = 0; i < 10; i++) { 
         chunk = new StringBuffer(); 
        for (int j = 0; j < val; j++) { 
         chunk.append(" Message #" + i+ "#"+j); 
        } 
         output.write(chunk.toString()+"\n"); 
        System.out.println("write"); 
        Thread.sleep(isleepTime); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       try { 
        System.out.println("output.close();"); 
        output.close(); 
       } catch (IOException ex) { 
        ex.printStackTrace(); 
       } 
      } 
     } 
    }).start(); 

    return output; 
} 

答えて

2

フォームジャージのドキュメントを作品:

ChunkedOutputでチャンクを書くは簡単です、あなただけ(メソッドの書き込みを呼び出す)を正確に書き込みます出力に1つのチャンク。入力を読むと少し複雑になります。 ChunkedInputは、開発者から通知されない限り、バイトストリーム内のチャンクを区別する方法を知らない。カスタムチャンク境界を定義するために、ChunkedInputは、入力ストリームからチャンクを読み込んでそれを分離するChunkParserを登録する可能性を提供します。 Jerseyはいくつかのチャンクパーサーの実装を提供しています。必要に応じて独自のパーサーを実装してチャンクを分離することもできます。上の例では、Jerseyが提供するデフォルトのパーサーは、\ r \ n区切り文字シーケンスの存在に基づいてチャンクを区切ります。

サーバーで\ r \ nでチャンクを区切らなければならない、またはチャンクパーサーを登録する必要があります。

Client client = ClientBuilder.newClient(); 
//2 is to increase amount of data and 3(seconds) is for time b/w chunked output ,can be changed 
     final Response response = client.target("http://jerseyexample-ravikant.rhcloud.com/rest/jws/streaming/2/3").request() 
       .get(); 
     final ChunkedInput<String> chunkedInput = response.readEntity(new GenericType<ChunkedInput<String>>() { 
     }); 
     chunkedInput.setParser(ChunkedInput.createParser(BOUNDARY)); 
     String chunk; 
     while ((chunk = chunkedInput.read()) != null) { 
      System.err.println("Next chunk received: "); 
      System.out.println(chunk); 
     } 

BOUNDARYは、各チャンクのファイナライズ文字列ですが:あなたが試みることができる各チャンクを確定定数を持っていると仮定すると

。 編集中のin.readLine解は、1つのチャンクが\ nであっても2つのチャンクとして解釈されますが、改行ごとに "チャンク"を分解します。

+0

上記のコードでBOUNDARYの値を\ r \ nとして使用していますが、まだ動作していません。 こんにちは、Webサービスメソッドコードを追加しました。 – gladiator

+0

output.write(chunk.toString()+ "\ n")を変更してみてください。 to.write(chunk.toString()+ "\ r \ n")に出力します。 – gba

+0

ありがとうございました – gladiator

関連する問題