flowable/flowable-engine · error · FlowableException
The JAXB binding definitions are not found for…
Error message
The JAXB binding definitions are not found for flowable-cxf: " + JAXB_BINDINGS_RESOURCE
What it means
CxfWSDLImporter.importFrom requires a JAXB binding customization resource (JAXB_BINDINGS_RESOURCE) on the context classpath to generate the dynamic client. If the classloader enumerates zero resources with that name, it throws FlowableException 'The JAXB binding definitions are not found for flowable-cxf'.
Solutions
- Add the flowable-cxf dependency (and its transitive CXF/JAXB deps) to the runtime classpath.
- Verify the resource exists via Thread.currentThread().getContextClassLoader().getResources(<JAXB_BINDINGS_RESOURCE>).
- Fix maven-shade/assembly filters so the binding resource is not excluded from the artifact.
- Ensure the thread context classloader is set correctly in OSGi/app-server environments.
Example fix
// before: missing dependency // (no flowable-cxf on classpath) // after <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-cxf</artifactId> <version>6.7.2</version> </dependency>
Defensive patterns
Strategy: validation
Validate before calling
if (!Thread.currentThread().getContextClassLoader().getResources("jaxb-bindings.xml").hasMoreElements()) {
throw new IllegalStateException("flowable-cxf JAXB binding resource missing from classpath");
} Try / catch
try {
importer.importFrom(wsdlUrl);
} catch (FlowableException e) {
if (e.getMessage().contains("not found for flowable-cxf")) {
// add/fix flowable-cxf dependency and redeploy
}
} Prevention
- Declare flowable-cxf as a runtime dependency wherever the WSDL importer runs.
- Check shade/assembly filters do not strip the binding resource.
- Fail fast at startup with a classpath self-check for the resource.
When it happens
Trigger: Calling importFrom when the context classloader cannot find the JAXB binding resource — the flowable-cxf jar is missing from the runtime classpath, or the resource was stripped by build filtering/shading excludes.
Common situations: Deploying an app without the flowable-cxf module jar; fat-jar shading excluding META-INF resources; custom classloader setups (application servers) not exposing the resource to the thread context classloader.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- The JAXB binding definitions are not found for…
- Error retrieving the JAXB binding definitions
- Several JAXB binding definitions found for flowable-cxf: "…
- Several JAXB binding definitions found for flowable-cxf: "…
- An error occurs creating a web-service client for WSDL '" +…
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/0bdbe71f89ab72e2.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/CxfWSDLImporter.java:138
if (xjcBindingUrls.hasMoreElements()) {
throw new FlowableException("Several JAXB binding definitions found for flowable-cxf: " + JAXB_BINDINGS_RESOURCE);
}
DynamicClientFactory.newInstance(bus).createClient(url, Arrays.asList(new String[] { xjcBindingUrl.toString() }));
WSDLManager wsdlManager = bus.getExtension(WSDLManager.class);
Definition def = wsdlManager.getDefinition(url);
WSDLServiceBuilder builder = new WSDLServiceBuilder(bus);
List<ServiceInfo> services = builder.buildServices(def);
for (ServiceInfo service : services) {
WSService wsService = this.importService(service);
this.wsServices.put(this.namespace + wsService.getName(), wsService);
}
if (def != null && def.getTypes() != null) {
this.importTypes(def.getTypes());
}
} else {
throw new FlowableException("The JAXB binding definitions are not found for flowable-cxf: " + JAXB_BINDINGS_RESOURCE);
}
} catch (WSDLException e) {
e.printStackTrace();
} catch (IOException e) {
throw new FlowableException("Error retrieving the JAXB binding definitions", e);
}
}
protected WSService importService(ServiceInfo service) {
String name = service.getName().getLocalPart();
String location = "";
for (EndpointInfo endpoint : service.getEndpoints()) {
location = endpoint.getAddress();
}
WSService wsService = new WSService(this.namespace + name, location, this.wsdlLocation);
for (OperationInfo operation : service.getInterface().getOperations()) {View on GitHub (pinned to d6d39ce1c6)