quelqu'un peut me aider pourquoi le code Java est d'avoir problème et l'impression de toutes les données en une seule fois au lieu de prinitng chaque morceau comme code javascriptChunkedInput ne fonctionne pas en jersey
code Java:
import org.glassfish.jersey.client.ChunkedInput;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;
public class RunClient {
public static void main(String args[]) throws InterruptedException {
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>>() {
});
String chunk;
while ((chunk = chunkedInput.read()) != null) {
System.err.println("Next chunk received: ");
System.out.println(chunk);
}
}
}
JavaScript: (Ouvrir la page http://jerseyexample-ravikant.rhcloud.com/rest/jws puis appuyez sur F12 et exécuter ci-dessous dans la console comme javascript Appel non autorisé d'autres domaines)
//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: Juste pour aider ce travaille aussi la volonté connexion java normale
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();
Mon code 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;
}
Toujours les mêmes toutes imprimées en boucle simple, ont utilisé la valeur de BOUNDARY comme \ r \ n dans le code ci-dessus, mais ne fonctionne toujours pas Salut ont ajouté le code de méthode de service Web peut-on le voir. – gladiator
Essayez de modifier output.write (chunk.toString() + "\ n"); à output.write (chunk.toString() + "\ r \ n"); – gba
Merci, ça a marché – gladiator