Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-users] NPE when trying to use Jetty async HTTP client

Good evening,

I am trying to use async HTTP client to POST a JSON string to Google FCM server and then parse the JSON response, but unfortunately get a NullPointerException:

private static final HttpClient sHttpClient = new HttpClient();
private static final Response.ContentListener sFcmListener = new Response.ContentListener() {
    @Override
    public void onContent(Response response, ByteBuffer content) {
        if (response.getStatus() != 200) {
            return;
        }

        String body = StandardCharsets.UTF_8.decode(content).toString();
        System.out.printf("onContent: %s\n", body);
        Map<String, Object> resp = (Map<String, Object>) JSON.parse(body);

        try {
            Object[] results = (Object[]) resp.get(FCM_RESULTS);
            Map result = (Map) results[0];
            String error = (String) result.get(FCM_ERROR);
            if (FCM_NOT_REGISTERED.equals(error)) {
                // TODO delete invalid FCM token from the database
            }
        } catch (Exception ignore) {
        }
    }
};

public static void main(String[] args) throws Exception {
    sHttpClient.start();
    sHttpClient.POST(FCM_URL)
        .header(HttpHeader.AUTHORIZATION, FCM_KEY)
        .header(HttpHeader.CONTENT_TYPE, "application/json")
        .content(new StringContentProvider(JSON.toString(REQUEST)))
        .onResponseContent(sFcmListener)
        .send();
}

2017-06-30 10:46:41.312:INFO::main: Logging initialized @168ms to org.eclipse.jetty.util.log.StdErrLog
Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.NullPointerException
    at org.eclipse.jetty.client.util.FutureResponseListener.getResult(FutureResponseListener.java:118)
    at org.eclipse.jetty.client.util.FutureResponseListener.get(FutureResponseListener.java:101)
    at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:682)
    at de.afarber.fcmnotregistered.Main.main(Main.java:68)
Caused by: java.lang.NullPointerException
    at org.eclipse.jetty.io.ssl.SslClientConnectionFactory.newConnection(SslClientConnectionFactory.java:59)
    at org.eclipse.jetty.client.AbstractHttpClientTransport$ClientSelectorManager.newConnection(AbstractHttpClientTransport.java:191)
    at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:420)
    at org.eclipse.jetty.io.ManagedSelector.access$1600(ManagedSelector.java:61)
    at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:599)
    at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
    at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590)
    at java.lang.Thread.run(Thread.java:745)

Full source code here:
https://github.com/afarber/jetty-newbie/blob/master/FcmNotRegistered/src/main/java/de/afarber/fcmnotregistered/Main.java

More details at StackOverflow:
https://stackoverflow.com/questions/44842548/npe-when-trying-to-use-jetty-async-http-client

Also I wonder, what exactly makes the HttpClient to act non-blocking?

Is async behaviour triggered by passing a non-null argument to its send() method?

Best regards
Alex

Back to the top