[
https://issues.apache.org/jira/browse/CAMEL-25214?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18121458#comment-18121458
]
Claus Ibsen commented on CAMEL-25214:
-------------------------------------
Merged in https://github.com/apache/camel/pull/27163 (commit ac7c5c76729b),
thanks!
_Claude Code on behalf of davsclaus_
> camel-hl7 - HL7DataFormat decodes and encodes messages with MSH-18 = 8859/6,
> 8859/7, 8859/8, 8859/9 or 8859/15 in the wrong charset, and fails for GB
> 18030-2000 (wrong entries in HL7Charset)
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25214
> URL: https://issues.apache.org/jira/browse/CAMEL-25214
> Project: Camel
> Issue Type: Bug
> Components: camel-hl7
> Reporter: shashank
> Assignee: shashank
> Priority: Minor
> Fix For: 4.23.0
>
>
> {{HL7DataFormat}} reads MSH-18 (character set, HL7 table 0211) to choose the
> charset for unmarshal and marshal, through {{HL7Charset}}. Some entries of
> that enum are wrong:
> {code:java}
> ISO_8859_5("8859/5", "ISO-8859-5"),
> ISO_8859_6("8859/1", "ISO-8859-6"), // the HL7 name should be 8859/6
> ISO_8859_7("8859/1", "ISO-8859-7"), // 8859/7
> ISO_8859_8("8859/1", "ISO-8859-8"), // 8859/8
> ISO_8859_9("8859/1", "ISO-8859-9"), // 8859/9
> ...
> GB_1830_2000("GB 18030-2000", ""), // no Java charset name
> {code}
> {{getHL7Charset}} returns the first entry whose HL7 name matches, so these
> four entries can never be selected ({{8859/1}} finds {{ISO_8859_1}} first),
> and {{8859/15}} (in table 0211 since v2.5) has no entry. The result:
> ||MSH-18||charset used by main||
> |{{8859/6}}, {{8859/7}}, {{8859/8}}, {{8859/9}}, {{8859/15}}|the exchange
> charset (UTF-8 unless set): Arabic, Greek, Hebrew, Turkish and Latin-9 text
> is decoded as mojibake on unmarshal and written in the wrong charset on
> marshal|
> |{{GB 18030-2000}}|{{""}}: unmarshal fails with
> {{UnsupportedEncodingException}}, so does marshal|
> For example a message with MSH-18 {{8859/7}} and the name {{Παπαδόπουλος}},
> written in ISO-8859-7, is unmarshalled as {{Ξ Ξ±ΟΞ±Ξ΄ΟΟΞΏΟλοΟ}}, and the
> header {{CamelCharsetName}} says {{UTF-8}}. A patient name with {{Ş}} or
> {{ğ}} in an {{8859/9}} message is corrupted the same way.
> camel-mllp ({{MllpProtocolConstants.MSH18_VALUES}}) and HAPI
> ({{ca.uhn.hl7v2.llp.HL7Charsets}}) map these codes to {{ISO-8859-6}} ...
> {{ISO-8859-9}}, {{ISO-8859-15}} and {{GB18030}}.
> h3. Reproduction
> {code:java}
> from("direct:unmarshal").unmarshal().hl7(false).to("mock:unmarshal");
> String hl7 =
> "MSH|^~\\&|MYSENDER|MYSENDERAPP|MYCLIENT|MYCLIENTAPP|200612211200||QRY^A19|1234|P|2.4||||||8859/7"
> +
> "\rQRD|200612211200|R|I|GetPatient|||1^RD|0101701234^Παπαδόπουλος|DEM||";
> template.sendBody("direct:unmarshal", new
> ByteArrayInputStream(hl7.getBytes("ISO-8859-7")));
> // QRD-8-2 is "Ξ Ξ±ΟΞ±Ξ΄ΟΟΞΏΟλοΟ", CamelCharsetName is UTF-8
> {code}
> A unit test unmarshals 8859/6, 8859/7, 8859/8, 8859/9, 8859/15 and GB
> 18030-2000 messages and marshals 8859/7 and GB 18030-2000 messages: all eight
> fail on main, the 8859/5 control passes. The entries are the same in 3.0.0,
> 4.0.0, 4.14.0, 4.18.0 and 4.22.0. A small formal model (Lean 4) of the lookup
> checks that main gets exactly these six table 0211 codes wrong, that the four
> entries are unreachable, and that the fixed table maps every code on which
> HAPI and camel-mllp agree to their charset without changing any code main
> already maps correctly.
> h3. Proposed fix
> {code:java}
> ISO_8859_6("8859/6", "ISO-8859-6"),
> ISO_8859_7("8859/7", "ISO-8859-7"),
> ISO_8859_8("8859/8", "ISO-8859-8"),
> ISO_8859_9("8859/9", "ISO-8859-9"),
> ISO_8859_15("8859/15", "ISO-8859-15"),
> ...
> GB_1830_2000("GB 18030-2000", "GB18030"),
> {code}
> The Japanese entries ({{ISO IR14}}, {{ISO IR87}}, {{ISO IR159}}) and {{CNS
> 11643-1992}} are left as they are: HAPI maps them differently, and Japanese
> HL7 v2 practice (ISO 2022 code extension, MSH-20) needs more than a table
> entry. With the fix the new test and the whole camel-hl7 suite pass (79
> tests). Because messages with these MSH-18 values are now decoded differently
> (and {{CamelCharsetName}} changes), the change gets a short upgrade guide
> note.
> Duplicate check (2026-09-30): JIRA "HL7Charset", "MSH-18", "GB 18030",
> "8859/7", "8859/9": CAMEL-8079, CAMEL-9867 and CAMEL-22712 (camel-mllp only).
> No pull request touches {{HL7Charset}} since it was added.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)