Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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.lang.IllegalArgumentException:重复处理程序名称:netty http服务器中的解码器_Java_Java 8_Netty_Jersey 1.0 - Fatal编程技术网

java.lang.IllegalArgumentException:重复处理程序名称:netty http服务器中的解码器

java.lang.IllegalArgumentException:重复处理程序名称:netty http服务器中的解码器,java,java-8,netty,jersey-1.0,Java,Java 8,Netty,Jersey 1.0,我正在尝试创建一个netty jersey http应用程序,代码位于github分支重复处理程序中 当我运行主程序时,代码编译并运行良好 当我使用任何http请求调用此应用程序时http://localhost:8003/hellonetty或在浏览器中,我得到以下异常- Nov 26, 2018 12:22:04 PM io.netty.channel.ChannelInitializer exceptionCaught WARNING: Failed to initiali

我正在尝试创建一个netty jersey http应用程序,代码位于github分支重复处理程序中

当我运行主程序时,代码编译并运行良好

当我使用任何http请求调用此应用程序时http://localhost:8003/hellonetty或在浏览器中,我得到以下异常-

    Nov 26, 2018 12:22:04 PM io.netty.channel.ChannelInitializer exceptionCaught
    WARNING: Failed to initialize a channel. Closing: [id: 0xcbb67225, L:/127.0.0.1:8003 - R:/127.0.0.1:62568]
    java.lang.IllegalArgumentException: Duplicate handler name: decoder
        at io.netty.channel.DefaultChannelPipeline.checkDuplicateName(DefaultChannelPipeline.java:1101)
        at io.netty.channel.DefaultChannelPipeline.filterName(DefaultChannelPipeline.java:302)
        at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:210)
        at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:201)
        at com.demo.netty.jersey.JaxRsServerChannelPipelineFactory.initChannel(JaxRsServerChannelPipelineFactory.java:41)
        at com.demo.netty.jersey.JaxRsServerChannelPipelineFactory.initChannel(JaxRsServerChannelPipelineFactory.java:12)
        at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:115)
        at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:107)
        at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:637)
        at io.netty.channel.DefaultChannelPipeline.access$000(DefaultChannelPipeline.java:46)
        at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1487)
        at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1161)
        at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:686)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:510)
        at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:423)
        at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:482)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:464)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
我的通道初始值设定项逻辑在


我不知道为什么会出现这个错误。如何解决此异常?

此代码中存在问题:

@Override
protected void initChannel(SocketChannel ch) {
    pipeline = ch.pipeline();
    pipeline.addLast("encoder", new HttpResponseEncoder());
    pipeline.addLast("decoder", new HttpRequestDecoder());
    pipeline.addLast("aggregator", new HttpObjectAggregator(1024));
    pipeline.addLast("jerseyHandler", jerseyHandler);

}
相同的
JaxRsServerChannelPipelineFactory
实例用于所有接受的连接(
Channel
s),因此代码不是线程安全的。这里的问题是,您可能会存储对
ChannelPipeline
的引用,但随后会并发访问它,这可能会导致多次添加同一处理程序的情况