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

Default method on interface is invisible during Camel Simple evaluation

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.16.1
    • 2.20.0
    • camel-core
    • None

    Description

      Issue can be reproduced with below unit test, I have not found it in tracker.
      Essence: interface A has default method, interface B extends A, default method is invisible during Simple language evaluation.

      import org.apache.camel.CamelContext;
      import org.apache.camel.Exchange;
      import org.apache.camel.builder.RouteBuilder;
      import org.apache.camel.impl.DefaultCamelContext;
      import org.apache.camel.impl.DefaultExchange;
      import org.junit.Assert;
      import org.junit.Test;
      
      public class DefaultMethodIsInvisibleTest {
      
          public static interface A {
              public default String defaultMethod() {
                  return "default method result";
              }
          }
      
          public static interface B extends A {
          }
      
          @Test
          public void camelSimpleDoesNotSeeDefaultMethod() throws Exception {
              CamelContext context = new DefaultCamelContext();
              context.addRoutes(new RouteBuilder() {
                  public void configure() {
                      from("direct:camelSimpleDoesNotSeeDefaultMethod").script().simple("${exchangeProperty.myObject.defaultMethod}");
                  }
              });
              context.start();
      
              Exchange incomingExchange = new DefaultExchange(context);
              incomingExchange.setProperty("myObject", new B() {
              });
      
              Exchange result = context.createProducerTemplate().send("direct:camelSimpleDoesNotSeeDefaultMethod", incomingExchange);
      
              Assert.assertNull(result.getException());
          }
      
      }
      

      Stacktrace:

      Caused by: org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: defaultMethod on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: defaultMethod not found on bean: com.ubs.wma.gfi.tradersbook.subscriber.DefaultMethodIsInvisibleTest$2@5dafbe45 of type: com.ubs.wma.gfi.tradersbook.subscriber.DefaultMethodIsInvisibleTest$2. Exchange[][Message: [Body is null]]
          at org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:290)
          at org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:114)
          ... 46 common frames omitted
      Caused by: org.apache.camel.component.bean.MethodNotFoundException: Method with name: defaultMethod not found on bean: com.ubs.wma.gfi.tradersbook.subscriber.DefaultMethodIsInvisibleTest$2@5dafbe45 of type: com.ubs.wma.gfi.tradersbook.subscriber.DefaultMethodIsInvisibleTest$2. Exchange[][Message: [Body is null]]
          at org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:269)
          at org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:183)
          at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:159)
      

      Attachments

        Issue Links

          Activity

            People

              davsclaus Claus Ibsen
              asulim Anton Sulim
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: