You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/05/20 11:29:04 UTC

[jira] [Commented] (CAMEL-11235) Simple Language: AmbiguousMethodCallException when calling method implemented by super class when method is defined by interface and abstract class

    [ https://issues.apache.org/jira/browse/CAMEL-11235?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16018403#comment-16018403 ] 

ASF GitHub Bot commented on CAMEL-11235:
----------------------------------------

GitHub user aldettinger opened a pull request:

    https://github.com/apache/camel/pull/1703

    CAMEL-11235: Proposal to fix an issue where a method inherited from a superclass overrides a superinterface method

    This PR proposes a fix for [CAMEL-11235](https://issues.apache.org/jira/browse/CAMEL-11235).
    
    Basically, the `BeanInfo` introspection mechanism traverses the single rooted class hierarchy collecting overrides first, and then proceed with interfaces.
    I've also created a new overload of `ObjectHelper.isOverridingMethod(...)` to deal with the case where a method inherited from a class [overrides a superinterface method](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.8.1).

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/aldettinger/camel master

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/camel/pull/1703.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1703
    
----
commit 0ddb6a7baf2e092304ec7644b655371bdac28cd5
Author: aldettinger <al...@gmail.com>
Date:   2017-05-20T10:18:57Z

    CAMEL-11235: Resolved an issue where a method inherited from a superclass overrides a superinterface method

commit 3ec1b9e7e302031212794138ea7d977d90e40594
Author: aldettinger <al...@gmail.com>
Date:   2017-05-20T11:13:15Z

    CAMEL-11235: Used the new override from getMethodInfo(...)

----


> Simple Language: AmbiguousMethodCallException when calling method implemented by super class when method is defined by interface and abstract class
> ---------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 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)