flowable/flowable-engine · warning
Process should be validated, but no process validator is…
Error message
Process should be validated, but no process validator is configured on the process engine configuration!
What it means
During BpmnParse.execute, if process validation is requested (validateProcess) but the ProcessEngineConfiguration has no ProcessValidator configured, this warning is logged and semantic validation is skipped; deployment continues unvalidated.
Solutions
- Configure a ProcessValidator (e.g. DefaultProcessValidator / the core validator's validation set) on the process engine configuration
- Use ProcessEngineConfiguration's default validation rules for SetKeyIsEmpty, etc.
- If validation is intentionally not wanted, set validateProcess=false to silence the mismatch
Example fix
// before processEngineConfig.setProcessValidator(null); // after processEngineConfig.setProcessValidator(new DefaultProcessValidator());
Defensive patterns
Strategy: validation
Validate before calling
if (cfg.isValidateProcess() && cfg.getProcessValidator() == null) {
cfg.setProcessValidator(new DefaultProcessValidator());
} Type guard
boolean validatorMissing(ProcessEngineConfiguration cfg) { return cfg.getProcessValidator() == null; } Prevention
- Always wire a ProcessValidator in custom engine configurations
- Decide explicitly: validator configured OR validateProcess disabled
- Review engine config when enabling the Activiti 5 compatibility layer
When it happens
Trigger: Deploying/parsing a BPMN model with process-level validation enabled while processValidator is null on the process engine configuration (common with the Activiti 5 compatibility engine where a validator was not wired).
Common situations: Minimal engine configurations that omit the default validation set; custom engine configurations in flowable5-engine compatibility mode.
Related errors
- A channel key detection value is required for the channel…
- Case should be validated, but no case validator is…
- Day of month values must be between 1 and 31
- Hour values must be between 0 and 23
- Month values must be between 1 and 12
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/dcb26365cc1dc902.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/parser/BpmnParse.java:172
boolean enableSafeBpmnXml = false;
String encoding = null;
if (processEngineConfiguration != null) {
enableSafeBpmnXml = processEngineConfiguration.isEnableSafeBpmnXml();
encoding = processEngineConfiguration.getXmlEncoding();
}
if (encoding != null) {
bpmnModel = converter.convertToBpmnModel(streamSource, validateSchema, enableSafeBpmnXml, encoding);
} else {
bpmnModel = converter.convertToBpmnModel(streamSource, validateSchema, enableSafeBpmnXml);
}
// XSD validation goes first, then process/semantic validation
if (validateProcess) {
ProcessValidator processValidator = processEngineConfiguration.getProcessValidator();
if (processValidator == null) {
LOGGER.warn("Process should be validated, but no process validator is configured on the process engine configuration!");
} else {
List<ValidationError> validationErrors = processValidator.validate(bpmnModel);
if (validationErrors != null && !validationErrors.isEmpty()) {
StringBuilder warningBuilder = new StringBuilder();
StringBuilder errorBuilder = new StringBuilder();
for (ValidationError error : validationErrors) {
if (error.isWarning()) {
warningBuilder.append(error);
warningBuilder.append("\n");
} else {
errorBuilder.append(error);
errorBuilder.append("\n");
}
}
// Throw exception if there is any errorView on GitHub (pinned to d6d39ce1c6)