You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Matthew Zipay (JIRA)" <ji...@apache.org> on 2016/06/29 02:19:46 UTC

[jira] [Created] (CAMEL-10099) AbstractJdbcMessageIdRepository is not actually parameterizable

Matthew Zipay created CAMEL-10099:
-------------------------------------

             Summary: AbstractJdbcMessageIdRepository<T> is not actually parameterizable
                 Key: CAMEL-10099
                 URL: https://issues.apache.org/jira/browse/CAMEL-10099
             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)