Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Cometd2.5.0升级到3.0.6之后,我会遇到什么错误。?_Java_Jetty_Cometd - Fatal编程技术网

Java 将Cometd2.5.0升级到3.0.6之后,我会遇到什么错误。?

Java 将Cometd2.5.0升级到3.0.6之后,我会遇到什么错误。?,java,jetty,cometd,Java,Jetty,Cometd,我用Java开发了一个CometD客户机服务,在我将Cometd2.5.0升级到Cometd3.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.transpo

我用Java开发了一个CometD客户机服务,在我将Cometd2.5.0升级到Cometd3.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();
HttpClient-HttpClient=new-HttpClient();
httpClient.start();
最后一个字符串cometdUrl=RestAssured.baseURI+COMETD_路径;
ClientTransport=new LongPollingTransport(null,httpClient);
bayeuxClient=新bayeuxClient(cometdUrl,运输);
bayeuxClient.putCookie(新的HttpCookie(“JSESSIONID”,token));
bayeuxClient.getChannel(Channel.META_HANDSHAKE).addListener(新的ClientSessionChannel.MessageListener(){
@凌驾
消息上的公共void(ClientSessionChannel通道,消息消息){
if(message.issusccessful()){
logger.info(“握手完成!”);
用于(UV通道通道值:UV_通道){
bayeuxClient.getChannel(channelValue.value()).subscribe(新建ClientSessionChannel.MessageListener()){
@凌驾
消息上的公共void(ClientSessionChannel通道,消息消息){
如果(message.issusccessful()){
试一试{
BlockingQueue notificationsPerChannel=notifications.get(uvChannel(message.getChannel());
notificationsPerChannel.put(消息);
}捕捉(中断异常e){
抛出新的IllegalStateException(“无法在队列中存储消息”);
}
}否则抛出新的IllegalStateException(“没有订阅频道:+消息”);
}
});
}
}否则{
抛出新的非法状态异常(“握手失败!”+cometdUrl);
}
}
});
bayeuxClient.handshake();

由于订阅被服务器拒绝,并且返回的回复消息没有
subscription
字段,因此该错误非常特殊。你能在客户端和服务器上用这些日志更新问题吗?不幸的是,我不能附加我的日志文件,因为其他东西太乱了。。。无论如何,我也创建了一个JavaScript客户端版本,它运行良好,请查找可能是问题所在的Java客户端。问题出在服务器应用程序上。您是否希望订阅被服务器拒绝?如果不这样做,那么这就是服务器应用程序的错误配置。服务器的CometD调试日志将告诉我们。您的客户端代码看起来不错,但我不会使用BlockingQueue(CometD是异步的,您不想在回调中阻止它,可能是永远的)。我只是尝试在Java客户端使用CometD 2.5.0(Jetty 7.6.0)的早期版本。它就像一个魔咒,没有改变服务器端的任何一行。整个图片中缺少了一些东西。好吧,那么您是否有一个不涉及
UV\u通道的可复制测试用例,它只使用CometD API,并且没有依赖性?如果您这样做,请在提交问题。谢谢