flowable/flowable-engine · error · FlowableException

XML serialization failed for

Error message

XML serialization failed for ${eventInstance}

What it means

EventPayloadToXmlStringSerializer.serialize builds a DOM Document from the payload and transforms it to a String with javax.xml Transformer. Any exception during transformer creation or the transform call ( TransformerConfigurationException, TransformerException, etc.) is wrapped in a FlowableException with the eventInstance. It means the XML engine could not turn the built DOM into a string.

Solutions

  1. Inspect the wrapped cause (TransformerException) for the precise failure point.
  2. Verify all event payload field names are valid XML element names (no spaces, leading digits, or special characters) in the event registry model.
  3. Check that the JDK/JAXP transformer implementation is available and not blocked by security settings; test TransformerFactory.newInstance().newTransformer() in isolation.
  4. If running in a restricted app server, ensure XML parser/transformer libraries are visible to the deployment's classloader.

Example fix

// before
eventModel.getPayload("order amount"); // invalid XML name

// after
eventModel.getPayload("orderAmount"); // valid XML element name
Defensive patterns

Strategy: try-catch

Validate before calling

for (String name : payloadFieldNames) {
    if (!name.matches("[A-Za-z_][A-Za-z0-9_.-]*")) {
        throw new IllegalArgumentException("Payload field name not XML-safe: " + name);
    }
}
// all names valid XML element names

Type guard

boolean isXmlSafeName(String name) {
    return name != null && name.matches("[A-Za-z_][A-Za-z0-9_.-]*");
}

Try / catch

try {
    String xml = serializer.serialize(eventInstance);
} catch (FlowableException e) {
    logger.error("XML serialization failed for event: " + eventInstance, e.getCause());
    throw e;
}

Prevention

When it happens

Trigger: Calling serialize(eventInstance) when the DOM Document built from payloads is invalid for transformation (e.g. element names/attribute names from payload definitions contain illegal XML name characters) or when the JAXP TransformerFactory fails to instantiate/configure a Transformer in the environment.

Common situations: Event payload field names with characters invalid in XML element names; JAXP implementation problems in constrained environments (missing/endorsed Xalan, classloader issues in app servers); JDK XML security features (e.g. FSP) rejecting the transform.

Understand the failure class

Background: "JSON serialization failed", "not JSON serializable", "Failed to serialize": why JSON marshaling errors happen and how to fix them — this error's family across 46 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/ed9c10e26c2548db. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-event-registry/src/main/java/org/flowable/eventregistry/impl/serialization/EventPayloadToXmlStringSerializer.java:67

            if (!eventInstance.getPayloadInstances().isEmpty()) {
                for (EventPayloadInstance payloadInstance : eventInstance.getPayloadInstances()) {
                    if (!payloadInstance.getEventPayloadDefinition().isNotForBody()) {
                        Element element = doc.createElement(payloadInstance.getDefinitionName());
                        element.setTextContent(payloadInstance.getValue().toString());
                        rootElement.appendChild(element);
                    }
                }
            }

            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer = tf.newTransformer();
            StringWriter writer = new StringWriter();
            transformer.transform(new DOMSource(doc), new StreamResult(writer));
            return writer.toString();

        } catch (Exception e) {
            throw new FlowableException("XML serialization failed for " + eventInstance, e);
        }
    }

}

View on GitHub (pinned to d6d39ce1c6)