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

Claus Ibsen reassigned CAMEL-25317:
-----------------------------------

    Assignee: shashank

> camel-iso8583 - unmarshal fails with "IsoType ... is not known" for every 
> message type without an ISO header or with a binary ISO header
> ----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25317
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25317
>             Project: Camel
>          Issue Type: Bug
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Minor
>             Fix For: 4.23.0
>
>
> {{Iso8583DataFormat.unmarshal}} takes the length of the ISO header to skip 
> from the j8583 {{MessageFactory}}:
> {code:java}
> String type = messageFactory.getIsoHeader(i);
> if (type != null) {
>     len = type.length();
> }
> if (len == -1) {
>     throw new IllegalArgumentException("IsoType " + iType + " is not known in 
> the MessageFactory configuration file.");
> }
> return messageFactory.parseMessage(data, len);
> {code}
> In j8583 the ISO header of a message type is optional ({{<header 
> type="...">}} in {{j8583-config.xml}}), and a binary header ({{<header 
> binary="true">}}) is returned by {{getBinaryIsoHeader}} only. So every 
> message of a type without a text header fails, even when its parse guide is 
> configured: the test configuration of the module itself has parse guides for 
> 0201, 0202, 0280..0283 and 0600 without a text header, and 0600 is one of the 
> types the documentation lists.
> h3. Reproduction
> New {{Iso8583DataFormatIsoHeaderTest}}: a 0201 message (no header) and a 0280 
> message (binary header {{ffffffff}}) written by {{IsoMessage.writeData()}} 
> cannot be unmarshalled ({{IllegalArgumentException: IsoType 0201 is not known 
> in the MessageFactory configuration file.}}); a 0800 message with a text 
> header is the control and passes. Three runs on main.
> h3. Proposed fix
> Skip the binary header ({{parseMessage(data, length, true)}}) when the type 
> has one, the text header otherwise, and nothing when the type has no header. 
> Types with a text header are parsed as before. Module: 7 tests pass.
> Behaviour for a configured ISO type that does not match the data: before, a 
> type without a text header always failed with the 
> {{IllegalArgumentException}} above. With the fix the header length of that 
> type (possibly 0) is skipped and j8583 parses the rest, so a mismatch now 
> fails in j8583 with {{java.text.ParseException: ISO8583 MessageFactory has no 
> parsing guide for message type ...}}, the error main already gives when a 
> type with a text header is configured for data that does not match. That 
> j8583 message contains the raw message data, as it already does on main in 
> that case. An ISO type that is not in the configuration at all is no longer 
> rejected when the data has no header (the type is read from the data, as for 
> every other type). Checked with a probe (not part of the change): 0201 
> configured for 0800 data, 0999 for 0800 data and 0280 for 0201 data all fail 
> with that {{ParseException}}.
> Found with a Lean 4 model of {{writeData}} / {{unmarshal}}: the round trip 
> "unmarshal(writeData(header, message)) gives the header and the message back" 
> fails on main for every message whose type has no text header 
> ({{main_fails_without_text_header}}) and is proved for the fix for the three 
> header kinds ({{fix_roundtrip}}); the fix equals main wherever main returned 
> a result.
> Affected: 4.14.x, 4.18.x and main (unchanged since CAMEL-21974, 4.14.0).
> Duplicate check (2026-10-04): JIRA "iso8583" / "j8583" (CAMEL-21974 and older 
> component requests only); GitHub pull requests "iso8583": none on this.
> _Filed with Claude Code on behalf of allthingssecurity._



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to