1

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. Camel version 2.16.1. Am I missing something?

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 {
    @Test
    public void camelSimpleDoesNotSeeDefaultMethod() throws Exception {
        CamelContext context = new DefaultCamelContext();
        context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("direct:camelSimpleDoesNotSeeDefaultMethod").log("Result of default method invocation is ${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());
    }

public static interface A {
    public default String defaultMethod() {
        return "default method result";
    }
}

public static interface B extends A {
}
}

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)
Yamahar1sp
  • 510
  • 1
  • 6
  • 13

1 Answers1

1

default methods on interfaces is not explicit supported AFAIR. You are welcome to log a JIRA

Claus Ibsen
  • 56,060
  • 7
  • 50
  • 65