【发布时间】:2018-01-16 11:52:15
【问题描述】:
我正在尝试使用选择并根据对象的属性过滤对象,但它无法访问 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
【问题讨论】:
-
方法是公开的,但是TestPOJO类不是公开的,Camel代码不能正常访问。公开课程。
-
@ErwinBolwidt 谢谢这是有效的,请用相同的内容回答这个问题。
标签: java apache-camel