英文:
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
专注分享java语言的经验与见解,让所有开发者获益!
评论