Andrea Cosentino created CAMEL-26533:
----------------------------------------

             Summary: camel-jpa - bind CamelJpaParameters header values 
literally
                 Key: CAMEL-26533
                 URL: https://issues.apache.org/jira/browse/CAMEL-26533
             Project: Camel
          Issue Type: Bug
          Components: camel-jpa
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino
             Fix For: 4.24.0, 4.22.3, 4.18.6


The camel-jpa producer ({{JpaProducer.configureParameters}}) configures query 
parameters for JPA queries. When parameters are not specified on the endpoint, 
the producer reads parameter mappings from the {{CamelJpaParameters}} header 
({{Map<String, Object>}}). For each entry in the header map, if the value is an 
instance of {{String}}, it is evaluated as a Simple expression 
({{simple.createExpression(str).evaluate(exchange, Object.class)}}).

h3. Current behaviour

When query parameters are supplied via the {{CamelJpaParameters}} header, any 
{{String}} parameter value is evaluated as a Simple expression with the 
exchange in scope.

h3. Behaviour after the change

The producer separates endpoint configuration from message headers:
* Parameter values supplied through the {{CamelJpaParameters}} header are bound 
directly and literally with {{query.setParameter(key, value)}} without 
expression evaluation.
* The endpoint-level {{parameters}} option continues to support Simple 
expression evaluation as documented for route configuration.

h3. Classes involved

* 
{{components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaProducer.java}}
 - {{configureParameters}}
* 
{{components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConstants.java}}
 - {{JPA_PARAMETERS_HEADER}} documentation

h3. Code-level change

* {{JpaProducer.configureParameters}}: bind values from the 
{{CamelJpaParameters}} header literally; do not evaluate {{String}} values as 
Simple expressions.
* Retain Simple expression evaluation only for the endpoint {{parameters}} 
option.
* Update documentation for {{CamelJpaParameters}} to clarify that header 
parameter values are bound literally.
* Add an upgrade guide entry to 
{{docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc}} 
describing the literal parameter binding behaviour.

h3. Tests

Update {{JpaProducerWithQueryParametersHeaderTest}} to verify that {{String}} 
parameter values supplied in the {{CamelJpaParameters}} header are bound 
literally without expression evaluation. Add tests asserting that expressions 
like {{${body}}} or {{${header.id}}} remain literal strings in the query 
parameters.



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

Reply via email to