[ https://issues.apache.org/jira/browse/CAMEL-21817?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen reassigned CAMEL-21817: ----------------------------------- Assignee: Claus Ibsen > camel-bean - Add better support for invoking varargs methods > ------------------------------------------------------------ > > Key: CAMEL-21817 > URL: https://issues.apache.org/jira/browse/CAMEL-21817 > Project: Camel > Issue Type: Improvement > Components: camel-bean > Reporter: Claus Ibsen > Assignee: Claus Ibsen > Priority: Minor > Fix For: 4.11.0 > > > {code:java} > from("timer:java?period=5000") > .setBody() > > .simple("${bean:type:java.util.Arrays?method=asList(${exchangeProperty.CamelTimerCounter}, > \"${exchangeId}\",\"New event ${exchangeId} generated at > ${exchangeProperty.CamelTimerFiredTime}\")}") > .log("${body}"); {code} > > This ends up invoking asList(...) on Arrays that is a vararg, but is visible > as Object[] at runtime. So we need to have some special code in camel-bean to > detect this to ensure it invokes the method correctly, creating a single > Object[] array of the 3 args > > {code:java} > 2025-02-28 11:46:39.318 WARN 80713 --- [ - timer://java] > ache.camel.component.timer.TimerConsumer : Error processing exchange. > Exchange[F1744A70B96039E-0000000000000022]. Caused by: > [org.apache.camel.language.bean.RuntimeBeanExpressionException - Failed to > invoke method: asList(${exchangeProperty.CamelTimerCounter}, > "${exchangeId}","New event ${exchangeId} generated at > ${exchangeProperty.CamelTimerFiredTime}") on null due to: > java.lang.NullPointerException] > org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to > invoke method: asList(${exchangeProperty.CamelTimerCounter}, > "${exchangeId}","New event ${exchangeId} generated at > ${exchangeProperty.CamelTimerFiredTime}") on null due to: > java.lang.NullPointerException > at > org.apache.camel.language.bean.BeanExpression.invokeOgnlMethod(BeanExpression.java:474) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:218) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:232) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.language.simple.ast.SimpleFunctionStart$1.evaluate(SimpleFunctionStart.java:125) > ~[camel-core-languages-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.processor.SetBodyProcessor.process(SetBodyProcessor.java:45) > ~[camel-core-processor-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.handleFirst(RedeliveryErrorHandler.java:440) > ~[camel-core-processor-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:416) > ~[camel-core-processor-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199) > [camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189) > [camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166) > [camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148) > [camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59) > [camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at org.apache.camel.processor.Pipeline.process(Pipeline.java:163) > [camel-core-processor-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:347) > [camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:323) > [camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:293) > [camel-timer-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.component.timer.TimerConsumer$1.doRun(TimerConsumer.java:164) > [camel-timer-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:136) > [camel-timer-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at java.base/java.util.TimerThread.mainLoop(Timer.java:566) [?:?] > at java.base/java.util.TimerThread.run(Timer.java:516) [?:?] > Caused by: java.lang.NullPointerException > at java.base/java.util.Objects.requireNonNull(Objects.java:209) ~[?:?] > at java.base/java.util.Arrays$ArrayList.<init>(Arrays.java:4137) ~[?:?] > at java.base/java.util.Arrays.asList(Arrays.java:4122) ~[?:?] > at > java.base/jdk.internal.reflect.GeneratedMethodAccessor71.invoke(Unknown > Source) ~[?:?] > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] > at > org.apache.camel.support.ObjectHelper.invokeMethodSafe(ObjectHelper.java:485) > ~[camel-support-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:505) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:308) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:285) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.component.bean.AbstractBeanProcessor.useMethodInvocation(AbstractBeanProcessor.java:125) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.component.bean.AbstractBeanProcessor.process(AbstractBeanProcessor.java:91) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:82) > ~[camel-base-engine-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:32) > ~[camel-support-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.language.bean.BeanExpression.invokeBean(BeanExpression.java:368) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > at > org.apache.camel.language.bean.BeanExpression.invokeOgnlMethod(BeanExpression.java:470) > ~[camel-bean-4.11.0-SNAPSHOT.jar:4.11.0-SNAPSHOT] > ... 19 more {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)