From 0d6f0ce76f018ad5a1739360a29f655f57d53502 Mon Sep 17 00:00:00 2001 From: Tomohisa Igarashi Date: Wed, 3 Jun 2026 16:14:30 -0400 Subject: [PATCH] CAMEL-23669: camel-hl7: Missing reifier update for targetFormat Follows up https://github.com/apache/camel/pull/23714 - the 1st PR was missing an update on reifier to propagate a new property `targetFormat`, prevents it from working in YAML DSL --- .../component/hl7/HL7XmlDataFormatTest.java | 40 +++++++++++++++++++ .../dataformat/HL7DataFormatReifier.java | 1 + 2 files changed, 41 insertions(+) diff --git a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7XmlDataFormatTest.java b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7XmlDataFormatTest.java index 5b639b768a8d5..db3b85c4dc2ec 100644 --- a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7XmlDataFormatTest.java +++ b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7XmlDataFormatTest.java @@ -110,6 +110,36 @@ public void testMarshalXmlOutput() throws Exception { assertTrue(xml.contains("urn:hl7-org:v2xml")); } + @Test + public void testUnmarshalXmlFormatViaModelDefinition() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:unmarshalXmlModel"); + mock.expectedMessageCount(1); + + String body = createHL7AsString(); + template.sendBody("direct:unmarshalXmlModel", body); + + MockEndpoint.assertIsSatisfied(context); + Object rawBody = mock.getReceivedExchanges().get(0).getIn().getBody(); + assertNotNull(rawBody); + assertInstanceOf(Document.class, rawBody); + Document doc = (Document) rawBody; + assertEquals("ORM_O01", doc.getDocumentElement().getLocalName()); + } + + @Test + public void testRoundTripViaModelDefinition() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:roundtripModel"); + mock.expectedMessageCount(1); + + String body = createHL7AsString(); + template.sendBody("direct:roundtripModel", body); + + MockEndpoint.assertIsSatisfied(context); + String edi = mock.getReceivedExchanges().get(0).getIn().getBody(String.class); + assertTrue(edi.contains("MSH|^~\\&|")); + assertTrue(edi.contains("ORM^O01")); + } + @Test public void testRoundTripEdiToXmlToEdi() throws Exception { MockEndpoint mock = getMockEndpoint("mock:roundtrip"); @@ -139,6 +169,13 @@ protected RouteBuilder createRouteBuilder() { final HL7DataFormat hl7Default = new HL7DataFormat(); hl7Default.setValidate(false); + final org.apache.camel.model.dataformat.HL7DataFormat hl7XmlDef + = new org.apache.camel.model.dataformat.HL7DataFormat.Builder() + .targetFormat("XML").validate(false).end(); + final org.apache.camel.model.dataformat.HL7DataFormat hl7DefaultDef + = new org.apache.camel.model.dataformat.HL7DataFormat.Builder() + .validate(false).end(); + return new RouteBuilder() { public void configure() { from("direct:unmarshalOk").unmarshal().hl7(false).to("mock:unmarshal"); @@ -147,6 +184,9 @@ public void configure() { from("direct:marshalFromDoc").marshal(hl7Default).to("mock:marshalFromDoc"); from("direct:marshalXmlOutput").marshal(hl7Xml).to("mock:marshalXmlOutput"); from("direct:roundtrip").unmarshal(hl7Xml).marshal(hl7Default).to("mock:roundtrip"); + + from("direct:unmarshalXmlModel").unmarshal(hl7XmlDef).to("mock:unmarshalXmlModel"); + from("direct:roundtripModel").unmarshal(hl7XmlDef).marshal(hl7DefaultDef).to("mock:roundtripModel"); } }; } diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/HL7DataFormatReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/HL7DataFormatReifier.java index 7683a18005bc6..aef1b4122fb76 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/HL7DataFormatReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/HL7DataFormatReifier.java @@ -32,6 +32,7 @@ public HL7DataFormatReifier(CamelContext camelContext, DataFormatDefinition defi protected void prepareDataFormatConfig(Map properties) { properties.put("parser", asRef(definition.getParser())); properties.put("validate", definition.getValidate()); + properties.put("targetFormat", definition.getTargetFormat()); } }