将CometD 2.5.0升级到3.0.6后,我得到的错误是什么?

时间:2015-11-05 09:51:33

标签: java jetty cometd

我用Java开发了一个CometD客户端服务,在我将CometD 2.5.0升级到CometD 3.0.6之前一直运行良好。 (jetty-client-7.6.0到9.2.1也是如此)。我看了升级的文档,我在网上浏览了一下,自己花时间。没运气。希望有人能告诉我哪里错了。
这是一个例外:

2015-11-04 17:18:24 INFO  ResponseNotifier:197 - Exception while notifying listener org.cometd.client.transport.LongPollingTransport$2@35d92de8
java.lang.NullPointerException
    at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:988)
    at org.cometd.common.AbstractClientSession.getReleasableChannel(AbstractClientSession.java:277)
    at org.cometd.common.AbstractClientSession.receive(AbstractClientSession.java:230)
    at org.cometd.client.BayeuxClient.processMessage(BayeuxClient.java:787)
    at org.cometd.client.BayeuxClient$PublishTransportListener.processMessage(BayeuxClient.java:1193)
    at org.cometd.client.BayeuxClient$PublishTransportListener.onMessages(BayeuxClient.java:1185)
    at org.cometd.client.transport.LongPollingTransport$2.onComplete(LongPollingTransport.java:254)
    at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:193)
    at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:185)
    at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:446)
    at org.eclipse.jetty.client.HttpReceiver.responseSuccess(HttpReceiver.java:393)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.messageComplete(HttpReceiverOverHTTP.java:265)
    at org.eclipse.jetty.http.HttpParser.parseContent(HttpParser.java:1430)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:1272)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.parse(HttpReceiverOverHTTP.java:156)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.process(HttpReceiverOverHTTP.java:117)
    at org.eclipse.jetty.client.http.HttpReceiverOverHTTP.receive(HttpReceiverOverHTTP.java:69)
    at org.eclipse.jetty.client.http.HttpChannelOverHTTP.receive(HttpChannelOverHTTP.java:89)
    at org.eclipse.jetty.client.http.HttpConnectionOverHTTP.onFillable(HttpConnectionOverHTTP.java:108)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.lang.Thread.run(Thread.java:745)  

请查找我的Java客户端代码:

HttpClient httpClient = new HttpClient();
httpClient.start();
final String cometdUrl = RestAssured.baseURI + COMETD_PATH;
ClientTransport transport = new LongPollingTransport(null, httpClient);
bayeuxClient = new BayeuxClient(cometdUrl, transport);
bayeuxClient.putCookie(new HttpCookie("JSESSIONID", token));
bayeuxClient.getChannel(Channel.META_HANDSHAKE).addListener(new ClientSessionChannel.MessageListener() {

    @Override
    public void onMessage(ClientSessionChannel channel, Message message) {
        if (message.isSuccessful()) {
            logger.info("Handshake done!");
            for (UVChannel channelValue : UV_CHANNELS) {
                bayeuxClient.getChannel(channelValue.value()).subscribe(new ClientSessionChannel.MessageListener() {
                    @Override
                    public void onMessage(ClientSessionChannel channel, Message message) {
                        if (message.isSuccessful()) { 
                            try {
                                BlockingQueue<Message> notificationsPerChannel = notifications.get(uvChannel(message.getChannel()));
                                notificationsPerChannel.put(message);
                            } catch (InterruptedException e) {
                                throw new IllegalStateException("It was not possible to store a message in the queue");
                            }
                        } else throw new IllegalStateException("no subscription to channel: " + message);
                    }
                });
            }
        } else {
            throw new IllegalStateException("Handshake failed! " + cometdUrl);
        }
    }
});
bayeuxClient.handshake();

0 个答案:

没有答案