Matthew Zipay created CAMEL-10098:
-------------------------------------

             Summary: AbstractJdbcMessageIdRepository<T> is not actually 
parameterizable
                 Key: CAMEL-10098
                 URL: https://issues.apache.org/jira/browse/CAMEL-10098
             Project: Camel
          Issue Type: Bug
          Components: camel-core, camel-sql
    Affects Versions: 2.15.1
         Environment: Camel 2.15.1.redhat-620133
JBoss Fuse 6.2.0.redhat-133

openjdk version "1.8.0_45"
OpenJDK Runtime Environment (build 1.8.0_45-b13)
OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)

Linux 3.10.0-229.1.2.el7.x86_64 #1 SMP Fri Mar 6 17:12:08 EST 2015 x86_64 
GNU/Linux (RHEL 7)
            Reporter: Matthew Zipay
            Priority: Minor


The org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository 
class is advertised as being extendable in the documentation, and is declared 
as parameterized in the source code, so that developers "can extend to build 
custom JDBC idempotent repository."

However, attempting to parameterize with anything other than String fails. The 
cause appears to be org.apache.camel.processor.idempotent.IdempotentConsumer, 
whose process() method assumes that the key is always a String before handing 
it off to the repository instance (which may in fact be a 
AbstractJdbcMessageIdRepository<T> where T is *not* String). The results is an 
unavoidable ClassCastException.

Here is the relevant bit from a stack trace using {{public class 
IdempRepository extends AbstractJdbcMessageIdRepository<IdempKey>}}:

{code}
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to 
my.custom.IdempKey
        at 
my.custom.IdempRepository.queryForInt(IdempRepository.java:18)[515:my-bundle:1.0.0.SNAPSHOT]
        at 
org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository$1.doInTransaction(AbstractJdbcMessageIdRepository.java:122)[273:org.apache.camel.camel-sql:2.15.1.redhat-620133]
        at 
org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository$1.doInTransaction(AbstractJdbcMessageIdRepository.java:120)[273:org.apache.camel.camel-sql:2.15.1.redhat-620133]
        at 
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:131)[202:org.apache.servicemix.bundles.spring-tx:3.2.12.RELEASE_1]
        at 
org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository.add(AbstractJdbcMessageIdRepository.java:120)[273:org.apache.camel.camel-sql:2.15.1.redhat-620133]
        at 
org.apache.camel.processor.idempotent.IdempotentConsumer.process(IdempotentConsumer.java:94)[198:org.apache.camel.camel-core:2.15.1.redhat-620133]
{code}




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to