java.lang.AbstractMethodError: io.netty.handler.codec.http.DefaultFullHttpRequest.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounted

huangapple 未分类评论46阅读模式
英文:

java.lang.AbstractMethodError: io.netty.handler.codec.http.DefaultFullHttpRequest.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounted

问题

以下是您提供的内容的翻译:

我是Java世界的新手,正尝试发送一个Https请求。当我尝试通过通道发送请求时,我遇到了以下错误:

java.lang.AbstractMethodError:io.netty.handler.codec.http.DefaultFullHttpRequest.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounted

以下是我的管道代码:

if (sslCtx != null) {
    ch.pipeline().addLast(sslCtx.newHandler(ch.alloc()));
}

ch.pipeline().addLast(new HttpClientCodec());

ch.pipeline().addLast(new HttpContentDecompressor());

ch.pipeline().addLast(new HttpObjectAggregator(1048576));
ch.pipeline().addLast("encoder", new HttpRequestEncoder());
ch.pipeline().addLast(new ClientHandler());

以下是我的引导代码:

ChannelFuture f = b.connect(host, port).sync();

ByteBuf bbuf = Unpooled.copiedBuffer(message, StandardCharsets.UTF_8);

FullHttpRequest request = new DefaultFullHttpRequest(
    HttpVersion.HTTP_1_1, HttpMethod.POST, uri, bbuf, Boolean.FALSE);
request.headers().set(HttpHeaders.Names.HOST, host);
request.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
request.headers().set(HttpHeaders.Names.CONTENT_LENGTH, bbuf.readableBytes());
((DefaultFullHttpRequest) request).content().clear().writeBytes(bbuf);

f.channel().writeAndFlush(request);

堆栈跟踪:

Exception in thread "main" java.lang.AbstractMethodError: io.netty.handler.codec.http.DefaultFullHttpRequest.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounted;
    at io.netty.util.ReferenceCountUtil.touch(ReferenceCountUtil.java:73)
    at io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:107)
    at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:821)
    at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:805)
    at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:842)
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1032)
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:296)

背景信息:尝试发送HTTPS请求

我做错了什么?

英文:

I'm new to the world of Java and trying to send a Https request. When I try to send a request through the channel I get the following error

java.lang.AbstractMethodError:io.netty.handler.codec.http.DefaultFullHttpRequest.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounted

Here is my pipeline code

if (sslCtx != null) {
                         ch.pipeline().addLast(sslCtx.newHandler(ch.alloc()));
                     }

                	 ch.pipeline().addLast(new HttpClientCodec());

                     ch.pipeline().addLast(new HttpContentDecompressor());

                     ch.pipeline().addLast(new HttpObjectAggregator(1048576));
                     ch.pipeline().addLast("encoder", new HttpRequestEncoder());
                     ch.pipeline().addLast(new ClientHandler());

Here is my bootstrap code

ChannelFuture f = b.connect(host, port).sync(); 
             
             ByteBuf bbuf = Unpooled.copiedBuffer(message, StandardCharsets.UTF_8);

             FullHttpRequest request = new DefaultFullHttpRequest(
                     HttpVersion.HTTP_1_1, HttpMethod.POST, uri,bbuf,Boolean.FALSE);
             request.headers().set(HttpHeaders.Names.HOST, host);
             request.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
             request.headers().set(HttpHeaders.Names.CONTENT_LENGTH, bbuf.readableBytes());
             ((DefaultFullHttpRequest) request).content().clear().writeBytes(bbuf);
             
             f.channel().writeAndFlush(request);

Stacktrace:

Exception in thread "main" java.lang.AbstractMethodError: io.netty.handler.codec.http.DefaultFullHttpRequest.touch(Ljava/lang/Object;)Lio/netty/util/ReferenceCounted;
	at io.netty.util.ReferenceCountUtil.touch(ReferenceCountUtil.java:73)
	at io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:107)
	at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:821)
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:805)
	at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:842)
	at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1032)
	at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:296

Context: Trying to send an HTTPS request

What am I doing wrong?

答案1

得分: 0

这很可能是因为您的类路径上有多个Netty 4.x依赖版本。请确保类路径上只有最新版本,然后它应该可以正常工作。

英文:

This is most likely because you have multiple Netty 4.x dependency versions on your class path. Just ensure you only have the latest on the class path and it should work

huangapple
  • 本文由 发表于 2020年4月10日 03:33:59
  • 转载请务必保留本文链接:https://java.coder-hub.com/61128867.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定