You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Alex Dettinger (JIRA)" <ji...@apache.org> on 2017/07/04 21:42:00 UTC

[jira] [Created] (CAMEL-11511) Camel bean binding issues

Alex Dettinger created CAMEL-11511:
--------------------------------------

             Summary: Camel bean binding issues
                 Key: CAMEL-11511
                 URL: https://issues.apache.org/jira/browse/CAMEL-11511
             Project: Camel
          Issue Type: Bug
            Reporter: Alex Dettinger
            Priority: Minor


Tests below show 2 issues in the bean binding:

{code:java}
public class PrivatePackageClassBeanInfoTest extends CamelTestSupport {

    @EndpointInject(uri = "mock:result")
    protected MockEndpoint mockResult;

    public static interface IA {
        public String method();
    }

    public static interface IB extends IA {
        public String method1();
    }

    class C implements IB {
        @Override
        public String method() {
            return "C.method() has been called";
        }

        @Override
        public String method1() {
            return "C.method1() has been called";
        }
    }

    public static interface IBC {
        public String method();
    }

    class D {
        public String method() {
            return "D.method() has been called";
        }
    }

    public class E extends D implements IBC {
    }

    @Test
    public void getInterfaceMethodsMessUpWithMultipleLevelOfInterface() throws InterruptedException {
        mockResult.expectedBodiesReceived("C.method() has been called");
        template.sendBodyAndProperty("direct:test", "", "myObject", new C());
        mockResult.assertIsSatisfied();
    }

    @Test
    public void interfaceMethodImplementedByPackagePrivateUpperClassFails() throws InterruptedException {

        System.out.println(Modifier.isPublic(E.class.getModifiers()));

        mockResult.expectedBodiesReceived("D.method() has been called");
        template.sendBodyAndProperty("direct:test", "", "myObject", new E());
        mockResult.assertIsSatisfied();
    }

    @Override
    public RouteBuilder createRouteBuilder() {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("direct:test").setBody(simple("${exchangeProperty.myObject.method}")).to(mockResult);
            }
        };
    }
}
{code}

Below messages are logged:
{noformat}
logged:org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: method on null due to: org.apache.camel.RuntimeExchangeException: IllegalAccessException occurred invoking method: public java.lang.String PrivatePackageClassBeanInfoTest$D.method() using arguments: [] on the exchange: Exchange[]
{noformat}

{noformat}
org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: method on null due to: org.apache.camel.RuntimeExchangeException: IllegalAccessException occurred invoking method: public java.lang.String PrivatePackageClassBeanInfoTest$C.method() using arguments: [] on the exchange: Exchange[]
{noformat}




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)