Ok, last post.  But I just fixed the route, sans "hack.  And since I've seen 
lots of other people having problems with Netty, maybe this will help them.


Instead of the transform().method(...) call, just do:


.convertBodyTo(String.class, “UTF-8”)

Problem solved.

(Holy cow did this take me too long to figure out...)


> On September 14, 2018 at 3:38 PM Ron Cecchini wrote:
> 
> 
>     Hi, Alex. Thank you you for your help.
> 
> 
>     I had read all of those pages (amongst the million or so I scanned...) 
> but your comment made it clearer as to what's possibly going on.
> 
> 
>     As it turned out, earlier today I accidentally stumbled upon a hackish 
> solution (think: Infinite Monkey Theorem) which fixed my Netty4/UDP write 
> problems.
> 
> 
>     I didn't have to use any encoders/decoders. (And OMG, that was a 
> Dante-esque trip through Hell ... no offense, Claus; I love Camel).
> 
> 
>     I just had to do this one transform() (see below) ... which, I'm still 
> not sure what's going on, as the bean's method is simply returning the passed 
> in JSON string as a String ... and that was all that was needed. I guess the 
> method is setting something on the Exchange's OutBody (?) that is making 
> everything kosher for Netty?
> 
> 
>     Of course, a String is serializable, but why couldn't I just go directly 
> from the endpoint (which is already returning a string representing a JSON 
> array) to Netty?
> 
> 
>     Anyway, here's the full text of my Server's route builder, along with the 
> hack.
> 
> 
>     I would love to hear how this fixed my route!
> 
> 
>     Thank you again.
> 
> 
>     ---------------------------------------------
> 
> 
>     @Component
>     public class Route extends RouteBuilder
>     {
>     @Override
>     public void configure () throws Exception
>     {
>     restConfiguration()
>     .host("localhost").port(8080)
>     .bindingMode(RestBindingMode.json);
> 
>     from("timer:autos?period={{timer.period}}")
>     .streamCaching()
>     .to("rest:get:auto/list")
>     .to("direct:udp");
> 
>     from("direct:udp")
>     .log("*** BEFORE write to UDP: ${body}")
>     .transform().method("myBean", "foo") // XXX: this one line hack fixed it
>     
> .to("netty4:udp://localhost:40000?udpConnectionlessSending=true&sync=false")
>     .log("*** AFTER write to UDP: ${body}");
>     }
> 
>     @Component("myBean")
>     public class Encoder
>     {
>     public String foo (String val) {
>     return val;
>     }
>     }
>     }
> 
> 
>     ---------------------------------------------
> 
>         > > On September 14, 2018 at 1:23 PM Alex Dettinger wrote:
> > 
> > 
> >         Hi Ron,
> > 
> >         By default, camel-netty4 includes default codecs based on java
> >         serialization. So, it could be that your payload is NOT 
> > Serializable.
> >         You would then need to configure codecs matching your case.
> > 
> >         You may find below links of interest:
> >         
> > https://github.com/apache/camel/blob/master/components/camel-netty4/src/main/docs/netty4-component.adoc#using-multiple-codecs
> >         
> > https://github.com/apache/camel/blob/master/components/camel-netty4/src/test/resources/org/apache/camel/component/netty4/multiple-codecs.xml
> >         
> > https://github.com/apache/camel/blob/master/components/camel-ganglia/src/test/java/org/apache/camel/component/ganglia/GangliaProtocolV31CamelTest.java#L214-L257
> > 
> >         Hope this help,
> >         Alex
> > 
> >         On Fri, Sep 14, 2018 at 12:26 AM Ron Cecchini
> >         wrote:
> >         > > I'll try a shorter version of my question:
> > 
> >             > > > Why does this work:
> > > 
> > > 
> > >             .to("mina2:udp://localhost:40000?sync=false")
> > > 
> > >             ...
> > > 
> > >             from("mina2:udp://localhost:40000?sync=false")
> > > 
> > > 
> > >             and this doesn't work:
> > > 
> > > 
> > >             .to("netty4:udp://localhost:40000?sync=false")
> > > 
> > >             ...
> > > 
> > >             from("netty4:udp://localhost:40000?sync=false")
> > > 
> > > 
> > >             In particular, the netty4:udp *write* fails.
> > > 
> > > 
> > >             Thanks.
> > > 
> > > 
> > >             p.s. I found something about using the 'encoder/decoder' 
> > > params. But I
> > >             don't see anything in the docs or book about it being 
> > > necessary. Is it
> > >             required? All I'm trying to do is write some JSON I got from 
> > > a Rest call.
> > >             >
> > > 
> > >         > > 
> >     > 

Reply via email to