flowable/flowable-engine · error · FlowableException
Error retrieving the JAXB binding definitions
Error message
Error retrieving the JAXB binding definitions
What it means
During importFrom, after locating the JAXB binding resource, an IOException while reading it (or otherwise retrieving binding definitions) is wrapped and rethrown as FlowableException 'Error retrieving the JAXB binding definitions'. It indicates the resource was found but could not be read.
Solutions
- Verify the jar/resource integrity (checksum, re-deploy the flowable-cxf jar) and redeploy the application.
- Check read permissions and accessibility of the jar file containing the binding resource.
- Log/print the URL from getResources() and try reading it directly to pinpoint the failing source.
- If the resource is a remote URL, ensure network availability and reasonable connection settings.
Example fix
// before
URL u = cl.getResource(JAXB_BINDINGS_RESOURCE); // unreadable/corrupt source
// after
try (InputStream in = u.openStream()) { /* verify readable at startup */ }
// and re-deploy a verified flowable-cxf jar if the stream fails Defensive patterns
Strategy: try-catch
Validate before calling
Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources("jaxb-bindings.xml");
while (urls.hasMoreElements()) {
try (InputStream in = urls.nextElement().openStream()) { in.read(); } // verify readable
} Try / catch
try {
importer.importFrom(wsdlUrl);
} catch (FlowableException e) {
if (e.getMessage().contains("Error retrieving the JAXB binding definitions")) {
// verify jar integrity, permissions, and redeploy
}
} Prevention
- Verify jar checksums after deployment to detect corrupted artifacts.
- Ensure the process user can read all jars containing the binding resource.
- Probe resource readability at application startup.
When it happens
Trigger: IOException thrown while opening/reading the JAXB binding URL from the classloader — corrupted jar, unreadable file, closed/defunct URL connection, or I/O failure reading the resource stream during DynamicClientFactory setup.
Common situations: Corrupted or partially downloaded jar in the app server; network/classloader resource (remote jar in JBoss/fuse) becoming unavailable; filesystem permission problems on exploded deployments; stale hot-deploy artifacts.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- Several JAXB binding definitions found for flowable-cxf: "…
- Several JAXB binding definitions found for flowable-cxf: "…
- The JAXB binding definitions are not found for…
- The JAXB binding definitions are not found for…
- 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/e65a86584b99c792.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/CxfWSDLImporter.java:143
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()) {
WSOperation wsOperation = this.importOperation(operation, wsService);
wsService.addOperation(wsOperation);
this.wsOperations.put(this.namespace + operation.getName().getLocalPart(), wsOperation);
}View on GitHub (pinned to d6d39ce1c6)