From 10da372338be6eb6c63b148e3dbc3e932c06c444 Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Mon, 9 Mar 2026 09:27:36 +0800 Subject: [PATCH] Fix multiple character events to keep intermediate spaces Signed-off-by: Yanming Zhou --- .../org/flowable/bpmn/converter/util/BpmnXMLUtil.java | 10 ++++++---- .../xml/MultipleCharacterEventsConverterTest.java | 11 +++++++++++ .../src/test/resources/multipleCharacterEvents.bpmn | 8 ++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/util/BpmnXMLUtil.java b/modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/util/BpmnXMLUtil.java index 29cccdb492a..d559755438b 100644 --- a/modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/util/BpmnXMLUtil.java +++ b/modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/util/BpmnXMLUtil.java @@ -200,12 +200,11 @@ public static ExtensionElement parseExtensionElement(XMLStreamReader xtr) throws while (!readyWithExtensionElement && xtr.hasNext()) { xtr.next(); if (xtr.isCharacters() || XMLStreamReader.CDATA == xtr.getEventType()) { - if (StringUtils.isNotEmpty(xtr.getText().trim())) { + if (StringUtils.isNotBlank(xtr.getText())) { if (extensionElement.getElementText() != null) { - extensionElement.setElementText(extensionElement.getElementText() + xtr.getText().trim()); - + extensionElement.setElementText(extensionElement.getElementText() + xtr.getText()); } else { - extensionElement.setElementText(xtr.getText().trim()); + extensionElement.setElementText(xtr.getText().stripLeading()); } } } else if (xtr.isStartElement()) { @@ -213,6 +212,9 @@ public static ExtensionElement parseExtensionElement(XMLStreamReader xtr) throws extensionElement.addChildElement(childExtensionElement); } else if (xtr.isEndElement() && extensionElement.getName().equalsIgnoreCase(xtr.getLocalName())) { + if (extensionElement.getElementText() != null) { + extensionElement.setElementText(extensionElement.getElementText().stripTrailing()); + } readyWithExtensionElement = true; } } diff --git a/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/MultipleCharacterEventsConverterTest.java b/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/MultipleCharacterEventsConverterTest.java index e512f984f1d..c587af33dbf 100644 --- a/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/MultipleCharacterEventsConverterTest.java +++ b/modules/flowable-bpmn-converter/src/test/java/org/flowable/editor/language/xml/MultipleCharacterEventsConverterTest.java @@ -26,6 +26,17 @@ void validateModel(BpmnModel model) { assertThat(model.getFlowElement("end").getExtensionElements().get("data").get(0).getElementText()).isEqualTo("a&b&c&d&e&f&g"); assertThat(model.getFlowElement("flow2").getExtensionElements().get("data").get(0).getElementText()).isEqualTo("a&b&c&d&e&f&g"); + + assertThat(model.getFlowElement("flow2").getExtensionElements().get("data2").get(0).getElementText()).isEqualTo("a& b& c& d& e& f& g"); + + assertThat(model.getFlowElement("flow2").getExtensionElements().get("data3").get(0).getElementText()).isNull(); + + assertThat(model.getFlowElement("flow2").getExtensionElements().get("data4").get(0).getElementText()).isNull(); + + assertThat(model.getFlowElement("flow2").getExtensionElements().get("data5").get(0).getElementText()).isEqualTo(""" + this is + multiple lines + data"""); } } diff --git a/modules/flowable-bpmn-converter/src/test/resources/multipleCharacterEvents.bpmn b/modules/flowable-bpmn-converter/src/test/resources/multipleCharacterEvents.bpmn index 3cf79976ecd..8ff3432699d 100644 --- a/modules/flowable-bpmn-converter/src/test/resources/multipleCharacterEvents.bpmn +++ b/modules/flowable-bpmn-converter/src/test/resources/multipleCharacterEvents.bpmn @@ -16,6 +16,14 @@ a&b&c&d&e&f&g + a& b& c& d& e& f& g + + +