JSON post avec asynchttpclient
Je suis en train de faire une requête POST sur un service REST avec async support (fourni par l'atmosphère). Voici ce que mon service ressemble:
package co.damt.services;
import javax.ws.rs.Consumes;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Produces;
import org.atmosphere.annotation.Broadcast;
import org.atmosphere.annotation.Suspend;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* REST Web Service
*
* @author damt
*/
@Path("/")
public class GenericResource {
private final Logger logger = LoggerFactory.getLogger(GenericResource.class);
@Suspend(contentType = "application/json")
@GET
public String suspend()
{
return "";
}
@Broadcast(writeEntity = false)
@POST
@Produces("application/json")
public Message broadcast(Message message)
{
logger.info(message.getAuthor()+"@"+message.getTime()+": "+message.getMessage());
return message;
}
}
Je suis en train de faire une requête POST à l'aide de asyncHttpClient et je reçois un statut de 200, mais pas de journaux à partir du service que le message a été reçu:
private final static ObjectMapper mapper = new ObjectMapper();
private static Request request;
public static void main( String[] args )
{
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
String jsonContent="";
try {
jsonContent = mapper.writeValueAsString(new Message("diego", "Hello World"));
System.out.println(jsonContent);
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
request = asyncHttpClient.preparePost("http://localhost:8080/Test/").
setHeader("Content-Type","application/json").
setHeader("Content-Length", ""+jsonContent.length()).
setBody(jsonContent).
build();
ListenableFuture<Integer> f= null;
try {
f = asyncHttpClient.executeRequest(request,
new AsyncCompletionHandler<Integer>(){
@Override
public Integer onCompleted(Response response) throws Exception{
//Do something with the Response
System.out.println(response.getStatusCode());
return response.getStatusCode();
}
@Override
public void onThrowable(Throwable t){
//Something wrong happened.
}
});
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
int statusCode;
if (f!=null)
{
try {
statusCode = f.get();
} catch (InterruptedException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} catch (ExecutionException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
asyncHttpClient.close();
Lorsque j'utilise Apache HttpClient les journaux de service que le message a été reçu et obtenir un code d'état 200:
@SuppressWarnings("deprecation")
final HttpClient httpClient = new DefaultHttpClient();
@SuppressWarnings("deprecation")
StringEntity requestEntity= null;
try {
requestEntity = new StringEntity(
mapper.writeValueAsString(new Message("diego", "Hello World!")),
ContentType.APPLICATION_JSON);
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
} catch(IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
HttpPost postMethod = new HttpPost("http://localhost:8080/Test/chat/");
postMethod.setEntity(requestEntity);
HttpResponse statusCode= null;
try {
statusCode = httpClient.execute(postMethod);
} catch (IOException ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
postMethod.releaseConnection();
if (statusCode != null)
{
System.out.println(statusCode.toString());
}
Pourquoi est asyncHttpClient pas de travail?
Vous devez vous connecter pour publier un commentaire.
Test est biaisé: HttpCompenents test a été frapper
localhost:8080/Test/chat
tout AsyncHttpClient un frappaitlocalhost:8080/Test
.