[
https://issues.apache.org/jira/browse/CAMEL-11235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16001542#comment-16001542
]
Pascal Schumacher commented on CAMEL-11235:
-------------------------------------------
Simplified example:
{code:java}
package test;
import org.apache.camel.EndpointInject;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.ExchangeBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
public class AmbiguousMethodCallExceptionTestSimplified extends
CamelTestSupport {
public static interface InterfaceSize {
int size();
}
public static abstract class AbstractClassSize {
public abstract int size();
}
public static class SuperClazz extends AbstractClassSize implements
InterfaceSize {
public int size() {
return 1;
}
}
public static class Clazz extends SuperClazz {
}
public static class AmbiguousMethodCallExceptionRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("seda:in").choice().when(simple("${headers.bean.size} !=
0")).to("mock:out");
}
}
@Produce(uri = "seda:in")
private ProducerTemplate in;
@EndpointInject(uri = "mock:out")
private MockEndpoint out;
@Override
protected RouteBuilder createRouteBuilder() {
return new AmbiguousMethodCallExceptionRoute();
}
@Test
public void ambiguousMethodCallException() throws Exception {
out.expectedMessageCount(1);
ExchangeBuilder exchangeBuilder = new
ExchangeBuilder(context).withHeader("bean", new Clazz());
in.send(exchangeBuilder.build());
out.assertIsSatisfied();
}
}
{code}
fails with:
{noformat}
23:05:37.056 [Camel (camel-1) thread #0 - seda://in] ERROR
org.apache.camel.processor.DefaultErrorHandler - Failed delivery for
(MessageId: ID-Redhawk-THINK-50474-1494277535444-0-3 on ExchangeId:
ID-Redhawk-THINK-50474-1494277535444-0-4). Exhausted after delivery attempt: 1
caught: org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
to invoke method: size on null due to:
org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous method
invocations possible: [public abstract int
test.AmbiguousMethodCallExceptionTestSimplified$InterfaceSize.size(), public
abstract int
test.AmbiguousMethodCallExceptionTestSimplified$AbstractClassSize.size()].
Exchange[]
Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId ProcessorId Processor
Elapsed (ms)
[route1 ] [route1 ] [seda://in
] [ 1027]
[route1 ] [choice1 ] [when[simple{Simple:
${headers.bean.size} != 0}]choice[] ] [ 35]
Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke
method: size on null due to:
org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous method
invocations possible: [public abstract int
test.AmbiguousMethodCallExceptionTestSimplified$InterfaceSize.size(), public
abstract int
test.AmbiguousMethodCallExceptionTestSimplified$AbstractClassSize.size()].
Exchange[]
at
org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:327)
at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:115)
at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:139)
at
org.apache.camel.model.language.ExpressionDefinition.evaluate(ExpressionDefinition.java:126)
at
org.apache.camel.model.language.ExpressionDefinition.evaluate(ExpressionDefinition.java:118)
at
org.apache.camel.builder.ExpressionBuilder$KeyedOgnlExpressionAdapter.evaluate(ExpressionBuilder.java:2490)
at
org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:36)
at
org.apache.camel.builder.BinaryPredicateSupport.matchesReturningFailureMessage(BinaryPredicateSupport.java:60)
at
org.apache.camel.builder.BinaryPredicateSupport.matches(BinaryPredicateSupport.java:50)
at
org.apache.camel.language.simple.ast.BinaryExpression$5.evaluate(BinaryExpression.java:233)
at
org.apache.camel.util.ExpressionToPredicateAdapter.matches(ExpressionToPredicateAdapter.java:37)
at org.apache.camel.builder.SimpleBuilder.matches(SimpleBuilder.java:85)
at
org.apache.camel.processor.FilterProcessor.matches(FilterProcessor.java:65)
at
org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:93)
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
at
org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:298)
at
org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:207)
at
org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:154)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.camel.component.bean.AmbiguousMethodCallException:
Ambiguous method invocations possible: [public abstract int
test.AmbiguousMethodCallExceptionTestSimplified$InterfaceSize.size(), public
abstract int
test.AmbiguousMethodCallExceptionTestSimplified$AbstractClassSize.size()].
Exchange[]
at
org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:278)
at
org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:189)
at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:160)
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:69)
at
org.apache.camel.language.bean.BeanExpression$InvokeProcessor.process(BeanExpression.java:212)
at
org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:323)
... 22 common frames omitted
23:05:37.057 [Camel (camel-1) thread #0 - seda://in] WARN
org.apache.camel.component.seda.SedaConsumer - Error processing exchange.
Exchange[]. Caused by:
[org.apache.camel.language.bean.RuntimeBeanExpressionException - Failed to
invoke method: size on null due to:
org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous method
invocations possible: [public abstract int
test.AmbiguousMethodCallExceptionTestSimplified$InterfaceSize.size(), public
abstract int
test.AmbiguousMethodCallExceptionTestSimplified$AbstractClassSize.size()].
Exchange[]]
org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke
method: size on null due to:
org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous method
invocations possible: [public abstract int
test.AmbiguousMethodCallExceptionTestSimplified$InterfaceSize.size(), public
abstract int
test.AmbiguousMethodCallExceptionTestSimplified$AbstractClassSize.size()].
Exchange[]
at
org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:327)
at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:115)
at
org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:139)
at
org.apache.camel.model.language.ExpressionDefinition.evaluate(ExpressionDefinition.java:126)
at
org.apache.camel.model.language.ExpressionDefinition.evaluate(ExpressionDefinition.java:118)
at
org.apache.camel.builder.ExpressionBuilder$KeyedOgnlExpressionAdapter.evaluate(ExpressionBuilder.java:2490)
at
org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:36)
at
org.apache.camel.builder.BinaryPredicateSupport.matchesReturningFailureMessage(BinaryPredicateSupport.java:60)
at
org.apache.camel.builder.BinaryPredicateSupport.matches(BinaryPredicateSupport.java:50)
at
org.apache.camel.language.simple.ast.BinaryExpression$5.evaluate(BinaryExpression.java:233)
at
org.apache.camel.util.ExpressionToPredicateAdapter.matches(ExpressionToPredicateAdapter.java:37)
at org.apache.camel.builder.SimpleBuilder.matches(SimpleBuilder.java:85)
at
org.apache.camel.processor.FilterProcessor.matches(FilterProcessor.java:65)
at
org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:93)
at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
at
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
at
org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:298)
at
org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:207)
at
org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:154)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.camel.component.bean.AmbiguousMethodCallException:
Ambiguous method invocations possible: [public abstract int
test.AmbiguousMethodCallExceptionTestSimplified$InterfaceSize.size(), public
abstract int
test.AmbiguousMethodCallExceptionTestSimplified$AbstractClassSize.size()].
Exchange[]
at
org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:278)
at
org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:189)
at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:160)
at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:69)
at
org.apache.camel.language.bean.BeanExpression$InvokeProcessor.process(BeanExpression.java:212)
at
org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:323)
... 22 common frames omitted
{noformat}
> Simple Language: AmbiguousMethodCallException when calling method implemented
> by super class when method is defined by interface and abstract class a
> ------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-11235
> URL: https://issues.apache.org/jira/browse/CAMEL-11235
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Affects Versions: 2.19.0
> Reporter: Pascal Schumacher
> Fix For: 2.20.0
>
>
> After updating from 2.18.3 to 2.19.0 the following simple expression:
> {code}${headers.materialnumbers.size} != 0{code}
> (materialnumbers is a LinkedHashSet) fails with:
> {noformat}
> 2017-05-08 09:10:17,143 ERR [main]
> org.apache.camel.processor.DefaultErrorHandler - Failed delivery for
> (MessageId: ID-RDDE102Y-57877-1494227416153-0-1 on ExchangeId:
> ID-RDDE102Y-57877-1494227416153-0-2). Exhausted after delivery attempt: 1
> caught: org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed
> to invoke method: size on null due to:
> org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous
> method invocations possible: [public abstract int java.util.Set.size(),
> public abstract int java.util.AbstractCollection.size()]. Exchange[]
> Message History
> ---------------------------------------------------------------------------------------------------------------------------------------
> RouteId ProcessorId Processor
> Elapsed (ms)
> [Read TB ] [Read TB ] [
> ] [ 67]
> [Read TB ] [choice1 ] [when[simple{Simple:
> ${headers.materialnumbers.size} != 0}]choice[] ] [ 62]
> Stacktrace
> ---------------------------------------------------------------------------------------------------------------------------------------
> org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to
> invoke method: size on null due to:
> org.apache.camel.component.bean.AmbiguousMethodCallException: Ambiguous
> method invocations possible: [public abstract int java.util.Set.size(),
> public abstract int java.util.AbstractCollection.size()]. Exchange[]
> at
> org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:327)
> at
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:115)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.language.bean.BeanExpression.evaluate(BeanExpression.java:139)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.model.language.ExpressionDefinition.evaluate(ExpressionDefinition.java:126)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.model.language.ExpressionDefinition.evaluate(ExpressionDefinition.java:118)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.builder.ExpressionBuilder$KeyedOgnlExpressionAdapter.evaluate(ExpressionBuilder.java:2490)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:36)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.builder.BinaryPredicateSupport.matchesReturningFailureMessage(BinaryPredicateSupport.java:60)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.builder.BinaryPredicateSupport.matches(BinaryPredicateSupport.java:50)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.language.simple.ast.BinaryExpression$5.evaluate(BinaryExpression.java:233)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.util.ExpressionToPredicateAdapter.matches(ExpressionToPredicateAdapter.java:37)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.builder.SimpleBuilder.matches(SimpleBuilder.java:85)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.processor.FilterProcessor.matches(FilterProcessor.java:65)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:93)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:541)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:198)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:529)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:497)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:365)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:497)
> [camel-core-2.19.0.jar:2.19.0]
> at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:209)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:139)
> [camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:374)
> [camel-core-2.19.0.jar:2.19.0]
> Caused by: org.apache.camel.component.bean.AmbiguousMethodCallException:
> Ambiguous method invocations possible: [public abstract int
> java.util.Set.size(), public abstract int
> java.util.AbstractCollection.size()]. Exchange[]
> at
> org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:278)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:189)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:160)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:69)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.language.bean.BeanExpression$InvokeProcessor.process(BeanExpression.java:212)
> ~[camel-core-2.19.0.jar:2.19.0]
> at
> org.apache.camel.language.bean.BeanExpression$OgnlInvokeProcessor.process(BeanExpression.java:323)
> ~[camel-core-2.19.0.jar:2.19.0]
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)