I've been working with the @Produce annotation as it allows me to carve the
routes into nice stages and let's me do CamelBlueprintTestSupport and route
substitution for testing and mutliple camel contexts aren't a problem.  It
works well except for one annoying bug.

If I define an interface of:

public String format(String foo);

And then invoke that against a route of direct:format.foo it will correctly
pass the String and then get the String back.  When I do that with a user
defined bean it gives me a BeanInvocationProxy on the receiving end.  That's
fundamentally broken for a number of reasons.

If I define an interface like:

public String format(Invoice i) where Invoice is a user defined Java bean
I'll receive the BeanInvocationProxy from the route. The error will contain
something along the lines of:

"No such method found on BeanInvocation public abstract void
com.my.processorinterface.format(Invoice)"

In order to circumvent that I have to do something like this with the route:

from("direct:format.invoice").bean(this,"realize").to("some other
routes...")

public Invoice realize(Invoice data){
                return data;
}

This forces the BeanInvocationProxy to cough up its contents but this should
be under the covers and not required explicitly.

There are a couple of reasons this seems wrong.

1. The Java interface should be a solid and expected contract. If it expects
to receive a parameter and get something back then the underlying mechanics
should ensure that.  It doesn't matter if it is decompiled into machinecode
and sent via Morse code over telegraph and recompiled the interface should
be the determining factor in its behavior.

2. It currently works inconsistently.  In one case it is doing exactly what
one expects sending and getting a simple Java type.  In the second case it
is injecting an unexpected data type.

The @Produce mechanism is extremely useful and it seems like this shouldn't
be a complex fix. 



--
View this message in context: 
http://camel.465427.n5.nabble.com/Produce-Bug-tp5776503.html
Sent from the Camel Development mailing list archive at Nabble.com.

Reply via email to