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

Claus Ibsen commented on CAMEL-26056:
-------------------------------------

Fixed in PR https://github.com/apache/camel/pull/28373

_Claude Code on behalf of davsclaus_

> camel-jdbc - an outputClass that does not resolve fails with a 
> NullPointerException, and generated keys use outputClass
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26056
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26056
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jdbc
>    Affects Versions: 4.18.0, 4.22.0, 4.23.0
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 4.24.0
>
>
> Found while adding the catalog body types of jdbc (CAMEL-24961), checked with 
> {{camel run}} with an H2 in-memory data source.
> h4. 1. An outputClass that does not resolve fails with a NullPointerException
> {{JdbcHelper}} resolves the class of outputClass and creates it without a 
> check ({{JdbcHelper}}, main 5aac7df76b83, lines 35-36), so a name that does 
> not resolve fails with {{RuntimeCamelException: NullPointerException: Cannot 
> invoke "java.lang.Class.getDeclaredConstructor(...)" because "type" is 
> null}}, without the class name. Checked on 4.24.0-SNAPSHOT with {{camel 
> run}}: outputClass=survey.NoSuchItem.
> *Proposed change*: fail with a message that names the class that is not found.
> h4. 2. Generated keys are mapped to outputClass
> The generated keys go through {{extractRows}} (JdbcProducer, line 375), which 
> applies outputClass and readSize (line 416 on). So with outputClass on the 
> endpoint, {{CamelGeneratedKeysRows}} holds beans of that class, or the insert 
> fails with "Cannot map all properties" when the key columns are not its 
> properties, and with resetAutoCommit the insert is rolled back (read in the 
> code). Checked on 4.24.0-SNAPSHOT with {{camel run}}: an insert with 
> CamelRetrieveGeneratedKeys on an endpoint with outputClass gave beans of that 
> class with only the id set.
> h4. 3. A Blob cannot be read after the producer
> A BLOB or CLOB value is a {{java.sql.Blob}} or {{Clob}} 
> ({{ResultSetIterator}}, line 213), but the producer closes the connection 
> before it returns, so the route cannot read it. useGetBytesForBlob gives a 
> byte[] for a BLOB; nothing does it for a CLOB. Checked on 4.24.0-SNAPSHOT 
> with {{camel run}}: a SelectOne of a BLOB column gave an 
> {{org.h2.jdbc.JdbcBlob}}, and its length then failed with "The object is 
> already closed".
> h4. 4. A null body fails with a NullPointerException
> The SQL is read with {{getBody(String.class)}} (lines 77 and 125), not 
> mandatory, so no body fails with useHeadersAsParameters with 
> {{NullPointerException: Cannot invoke "java.lang.CharSequence.length()" 
> because "this.text" is null}}, and otherwise with the error of the driver. 
> Checked on 4.24.0-SNAPSHOT with {{camel run}}.
> *Proposed change*: read the body with {{getMandatoryBody(String.class)}}.
> h4. 5. The docs say generated keys do not work with named parameters
> {{jdbc-component.adoc}} line 75: "Using generated keys does not work together 
> with named parameters.". They do: Checked on 4.24.0-SNAPSHOT with {{camel 
> run}}, an insert with {{:?label}} and useHeadersAsParameters gave its key in 
> CamelGeneratedKeysRows, and JdbcParameterizedQueryGeneratedKeysTest tests it.
> h4. Also read in the code, not run
> * The transacted option is not read anywhere ({{JdbcEndpoint}}, lines 49 and 
> 116-123), since CAMEL-3803.
> * CamelJdbcRowCount is set for SelectList only, but its doc says for a select.
> * Only the first result of a statement is read (no getMoreResults).
> * StreamList with resetAutoCommit commits before the route reads the rows, 
> which a driver that closes cursors at commit cannot read.
> _Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to