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
- Inspect the wrapped cause (TransformerException) for the precise failure point.
- Verify all event payload field names are valid XML element names (no spaces, leading digits, or special characters) in the event registry model.
- Check that the JDK/JAXP transformer implementation is available and not blocked by security settings; test TransformerFactory.newInstance().newTransformer() in isolation.
- 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
- Keep event payload field names valid XML element names (letters/underscore first, no spaces or special chars).
- Verify TransformerFactory.newInstance().newTransformer() works in your runtime environment.
- Watch for JDK XML security features (JAXP FSP) blocking transforms in app servers.
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
- Could not deserialize event to xml
- Could not evaluate xpath expression
- Could not evaluate xpath expression
- The channel xml key detection value was not found for the…
- The channel xml tenant detection value was not found for…
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)