Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-10236

BeanProccessor - method invocation with generics+annotations

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.17.2
    • Fix Version/s: 2.18.1, 2.19.0
    • Component/s: camel-core
    • Labels:
      None
    • Estimated Complexity:
      Unknown

      Description

      The following code does not work:

      public interface Transformer<T> {	
      	 public Object convert(T input) throws Exception;
      }
      
      public class MyTransformer implements Transformer<InputStream> {
          @Override
          public Object convert(@Body InputStream body) {...}
      }
      
      from("direct:foo")
      .transform().method(new MyTransformer(), "convert")
      .log("${body}");
      

      Stack trace:

      java.lang.ClassCastException: [B cannot be cast to java.io.InputStream
      	at net.haulogy.erpgis.esb.transformers.MyTransformer.convert(MyTransformer.java:1)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)
      	at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)
      	at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)
      	at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:177)
      	at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
      	at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:68)
      	at org.apache.camel.language.bean.BeanExpression$InvokeProcessor.process(BeanExpression.java:211)
      	at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:126)
      	at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:138)
      	at org.apache.camel.processor.TransformProcessor.process(TransformProcessor.java:50)
      

      But this is working fine:

      public class MyTransformer {
          public Object convert(@Body InputStream body) {...}
      }
      
      from("direct:foo")
      .transform().method(new MyTransformer(), "convert")
      .log("${body}");
      

        Attachments

          Activity

            People

            • Assignee:
              davsclaus Claus Ibsen
              Reporter:
              bligny Bernard Ligny
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: