java - IllegalAccessException : Class org. apache.camel.component.bean.MethodInfo 无法使用修饰符 "public"访问类的成员

标签 java apache-camel

我尝试使用选择并根据对象的属性过滤对象,但它无法访问 getter 并引发错误。请帮助我找到问题。

代码:

public class SampleTimerRouter extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        from("timer:simpleTimer1?period=2000").process((exchange) -> {
            List<TestPOJO> names = new ArrayList<>();
            names.add(new TestPOJO("f1"));
            names.add(new TestPOJO("f2"));
            exchange.getOut().setBody(names);
        }).split(body(TestPOJO.class)).choice().when().simple("${body.getfName} == 'f1'").process((exchange) -> {
            exchange.getOut().setBody(exchange.getIn().getBody(TestPOJO.class).getfName());
        }).to("file:output.txt?fileExist=Append").otherwise().to("stream:out");

    }
}

class TestPOJO {
    private String fName;

    public TestPOJO(String f) {
        fName = f;
    }

    public String getfName() {
        return fName;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

}

日志:

Caused by: org.apache.camel.RuntimeExchangeException: IllegalAccessException occurred invoking method: public java.lang.String com.TestPOJO.getfName() using arguments: [] on the exchange: Exchange[]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:474) ~[camel-core-2.19.1.jar:2.19.1]
    at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:291) ~[camel-core-2.19.1.jar:2.19.1]
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:264) ~[camel-core-2.19.1.jar:2.19.1]
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:178) ~[camel-core-2.19.1.jar:2.19.1]
    at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) ~[camel-core-2.19.1.jar:2.19.1]
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:69) ~[camel-core-2.19.1.jar:2.19.1]
    at org.apache.camel.language.bean.BeanExpression$InvokeProcessor.process(BeanExpression.java:212) ~[camel-core-2.19.1.jar:2.19.1]
    at org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:323) ~[camel-core-2.19.1.jar:2.19.1]
    ... 32 common frames omitted
Caused by: java.lang.IllegalAccessException: Class org.apache.camel.component.bean.MethodInfo can not access a member of class com.TestPOJO with modifiers "public"
    at sun.reflect.Reflection.ensureMemberAccess(Unknown Source) ~[na:1.8.0_151]
    at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(Unknown Source) ~[na:1.8.0_151]
    at java.lang.reflect.AccessibleObject.checkAccess(Unknown Source) ~[na:1.8.0_151]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:472) ~[camel-core-2.19.1.jar:2.19.1]
    ... 39 common frames omitted

最佳答案

尽管方法 getfNamepublic,但包含该方法的类 TestPOJO 具有仅包访问权限。

因此无法通过 Camel 代码的反射来访问它(除非它使用 setAccessible(true) ,但正如您在问题中所示,它没有使用)。

将 TestPOJO 类设置为 public 来解决此问题。

关于java - IllegalAccessException : Class org. apache.camel.component.bean.MethodInfo 无法使用修饰符 "public"访问类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48280625/

相关文章:

java - 比较java中两个不同的List对象

java - ProducerTemplate 在单元测试中用于在 new JndiContext 中构造 bean 时为 null

java - Camel - RabbitMQ Spring 启动

java - 是否可以使用camel循环遍历文本文件来创建路线?

apache-camel - 使用 Camel http 处理 CachedOutputStream

java - 出于测试目的注入(inject)通用 stub

java - Java 中可动态加载和卸载的应用程序模块 - 如何实现?

java - 如何使用 JUnit 测试类的验证注释?

java - SpringBoot JPA hibernate : Error creating bean with name 'entityManagerFactory'

java - Apache Camel Web3j 组件