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

  1. Add the flowable-cxf dependency (and its transitive CXF/JAXB deps) to the runtime classpath.
  2. Verify the resource exists via Thread.currentThread().getContextClassLoader().getResources(<JAXB_BINDINGS_RESOURCE>).
  3. Fix maven-shade/assembly filters so the binding resource is not excluded from the artifact.
  4. 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

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


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)