[ 
https://issues.apache.org/jira/browse/CAMEL-26180?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-26180.
---------------------------------
    Resolution: Fixed

Fixed by https://github.com/apache/camel/pull/29007 (merged to main as 
9758b07ea6e4737cc73bac9a2fe14148e2a48b45).

_Claude Code on behalf of Claus Ibsen (davsclaus)_

> camel-plc4x - a write tag Map with several addresses writes only the first, 
> and the polling consumer throws out of receive() for an unknown tag
> -----------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26180
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26180
>             Project: Camel
>          Issue Type: Bug
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 4.24.0
>
>
> Found while adding the catalog body types of plc4x (CAMEL-24961, PR #28411).
> h4. 1. A tag value that is not a Map fails with a raw ClassCastException
> The producer expects a {{Map<String, Map<String, Object>>}} (tag name to a 
> Map of address and value). {{Plc4XProducer.process}} (main 2a465aa4814c, line 
> 77) casts the body unchecked, so a body like {{\{t1: 42\}}} fails in 
> {{Plc4XEndpoint.buildPlcWriteRequest}} (line 231) with a ClassCastException 
> instead of the clear "The body must contain a Map<String,Map<String,Object>" 
> error. Checked on 4.24.0-SNAPSHOT with the PLC4X {{simulated://}} driver.
> Proposed: check each value is a Map and throw the existing 
> {{PlcInvalidTagException}} otherwise.
> h4. 2. A value Map with several addresses writes only the first
> {{Plc4XEndpoint.buildPlcWriteRequest}} (main 2a465aa4814c, line 231) takes 
> only {{keySet().iterator().next()}} of the inner Map, so the other addresses 
> of the same tag are ignored without notice. Read in the code, not run.
> Proposed: fail when the inner Map has more than one entry (or add each 
> entry), and document the expected shape.
> h4. 3. The polling consumer throws out of receive() for an unknown tag
> {{Plc4XPollingConsumer.doReceive}} (main 2a465aa4814c, line 106) calls 
> {{response.getObject(field)}}, which throws a {{PlcRuntimeException}} for a 
> tag the PLC does not have. Only {{TimeoutException}}, {{ExecutionException}}, 
> {{InterruptedException}} and {{PlcConnectionException}} are caught, so the 
> exception is thrown out of {{receive()}} instead of failing the exchange. 
> Checked on 4.24.0-SNAPSHOT with the {{simulated://}} driver. The 
> {{tagValues()}} method of open PR #28387 (CAMEL-25617) has the same problem.
> Proposed: catch it and set it on the exchange, as for the other read failures.
> h4. 4. A trigger written with parentheses fails, and the trigger syntax is 
> not documented
> {{Plc4XConsumer.getScraperConfig}} (main 2a465aa4814c, line 152) wraps the 
> {{trigger}} option in parentheses itself, so {{trigger=(RANDOM/b:BOOL)}} 
> becomes {{((RANDOM/b:BOOL))==(true)}} and fails with "Invalid trigger 
> strategy string". The plc4x doc mentions Triggered Reading but does not say 
> what the {{trigger}} value looks like. Checked on 4.24.0-SNAPSHOT with the 
> {{simulated://}} driver.
> Proposed: strip outer parentheses of the option value, and document the 
> syntax with an example ({{trigger=RANDOM/b:BOOL}}).
> _Claude Code on behalf of davsclaus_



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

Reply via email to