Thanks we need the good luck :)

________________________________
From: Claus Ibsen <claus.ib...@gmail.com>
Sent: Thursday, March 7, 2024 1:03:16 PM
To: users@camel.apache.org <users@camel.apache.org>
Subject: Re: Netty TCP Producer- unable to get byte array from response

Hi

Thanks for sharing your solution. And good luck on the Camel upgrade.

On Thu, Mar 7, 2024 at 11:34 AM Gawie van der Merwe <ga...@adumo.com.invalid>
wrote:

> We finally solved it by adding another decoder which returns a byte[]
>
> @BindToRegistry
>     public ChannelHandlerFactory epdecoderbyte() {
>         return ChannelHandlerFactories.newByteArrayDecoder("tcp");
>     }
>
> ________________________________
> From: Gawie van der Merwe <ga...@adumo.com.INVALID>
> Sent: Thursday, 07 March 2024 10:51
> To: users@camel.apache.org <users@camel.apache.org>
> Subject: Netty TCP Producer- unable to get byte array from response
>
> Hi guys,
>
> We are upgrading from camel 2.12.2 --> 3.21.2. And we have been stuck on
> Netty TCP.
>
> On the old version we recieved a response as "BodyType:
> org.jboss.netty.buffer.BigEndianHeapChannelBuffer"
> Now we get it as "PooledSlicedByteBuf(freed)". For the life of me are not
> able to get the bytes from the ByteBuf. It seems the camel netty component
> has already read the bytes. How can we get the bytes from the response? We
> tried retain()/release()/unwrap()/etc. Below a simple example to reproduce.
>
>
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> [                          main] MainSupport                    INFO
> Apache Camel (Main) 3.21.2 is starting
> [                          main] BaseMainSupport                INFO
> Classpath scanning enabled from base package: com.adumo.test.netty
> [                          main] BaseMainSupport                INFO
> Auto-configuration summary
> [                          main] BaseMainSupport                INFO
> [application.properties]       camel.main.routesIncludePattern=routes/*.xml
> [                          main] BaseMainSupport                INFO
> [application.properties]       camel.main.name=MyXmlCamel
> [                          main] BaseMainSupport                INFO
> [application.properties]       camel.main.routesReloadEnabled=true
> [                          main] BaseMainSupport                INFO
> [application.properties]
>  camel.main.routesReloadDirectory=src/main/resources/routes
> [                          main] BaseMainSupport                INFO
> [application.properties]       camel.main.routesReloadPattern=*.xml
> [                          main] AbstractCamelContext           INFO
> Apache Camel 3.21.2 (MyXmlCamel) is starting
> [                          main] NettyComponent                 INFO
> Creating shared NettyConsumerExecutorGroup with 17 threads
> [                          main] eWatcherResourceReloadStrategy INFO  Live
> route reloading enabled (directory: src/main/resources/routes)
> [                          main] BaseMainSupport                INFO
> Property-placeholders summary
> [                          main] BaseMainSupport                INFO
> [application.properties]       hi=Hello
> [                          main] BaseMainSupport                INFO
> [application.properties]       bye=Bye
> [                          main] AbstractCamelContext           INFO
> Routes startup (started:1)
> [                          main] AbstractCamelContext           INFO
> Started test-route1 (direct://test1)
> [                          main] AbstractCamelContext           INFO
> Apache Camel 3.21.2 (MyXmlCamel) started in 305ms (build:42ms init:139ms
> start:124ms JVM-uptime:1s)
> Sending
> bufRes PooledSlicedByteBuf(freed)
> lenght 635
> io.netty.util.IllegalReferenceCountException: refCnt: 0
>         at
> io.netty.buffer.AbstractByteBuf.ensureAccessible(AbstractByteBuf.java:1454)
>         at
> io.netty.buffer.AbstractByteBuf.checkReadableBytes0(AbstractByteBuf.java:1440)
>         at
> io.netty.buffer.AbstractByteBuf.checkReadableBytes(AbstractByteBuf.java:1428)
>         at
> io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:895)
>         at
> io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:903)
>         at com.adumo.test.netty.MyApplication$1.run(MyApplication.java:38)
>         at java.base/java.lang.Thread.run(Thread.java:829)
>
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> import java.nio.file.Files;
> import java.nio.file.Path;
> import java.nio.file.Paths;
>
> import org.apache.camel.ProducerTemplate;
> import org.apache.camel.main.Main;
>
> import io.netty.buffer.ByteBuf;
> import io.netty.buffer.Unpooled;
>
> public final class MyApplication {
>
>     private MyApplication() {
>     }
>
>     public static void main(String[] args) throws Exception {
>         Main main = new Main(MyApplication.class);
>         Thread sendThread = new Thread(new Runnable() {
>             @Override
>             public void run() {
>                 try {
>                     Thread.sleep(2000);
>
>                     System.out.println("Sending");
>                     ProducerTemplate pdt = main.getCamelTemplate();
>
>                     Path path = Paths.get("isoAuthReq");
>                     byte[] data = Files.readAllBytes(path);
>
>                     ByteBuf bufReq = Unpooled.wrappedBuffer(data);
>                     ByteBuf bufRes = (ByteBuf)
> pdt.requestBody("netty:tcp://x.x.x.x:49002?decoders=#epdecoder&encoders=#epencoder&disconnect=false&sync=true&reuseAddress=true&keepAlive=true&synchronous=true&requestTimeout=8000",
> bufReq);
>
>                     int lenght = bufRes.readableBytes();
>                     System.out.println("lenght " + lenght);
>                     byte[] bytes = new byte[lenght];
>                     bufRes.readBytes(bytes);
>                     System.out.println("Result " + bytes);
>
>                 } catch (Exception e) {
>                     e.printStackTrace();
>                 }
>             }
>         });
>         sendThread.start();
>         main.run(args);
>
>         System.out.println("Done");
>     }
>
> }
>
> Here is my encoder / decoder:
>
>     @BindToRegistry
>     public LengthFieldPrepender epencoder() {
>         // this will create an instance of this bean with the name of the
> method (eg epencoder)
>         return new LengthFieldPrepender(2);
>     }
>
>     @BindToRegistry
>     public ChannelHandlerFactory epdecoder() {
>         // this will create an instance of this bean with the name of the
> method (eg epdecoder)
>         return
> ChannelHandlerFactories.newLengthFieldBasedFrameDecoder(4096, 0, 2, 0, 2);
>     }
>
>
>
>
>
>
>
> [__tpx__]
>


--
Claus Ibsen
-----------------
@davsclaus
Camel in Action 2: 
https://eu01.z.antigena.com/l/sUluk5j8kd-1h8HHQAhRjYQvu1l8N58XGD_87RsEF4aTj6n2XZzzcyYSUwzSzDc_6CbnxS9Sc-YhRM24DqdjrIdo8PcZyP6w25-X2MzHWdGZmL2htD_M3mUbIirUNNs~AQ~xs-k9YmPci5P_HMMVfZMRHV2U3~wOE1irzRjCEpo7__X

Reply via email to