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.
> > > >
> > >
> > > > >
> > >