flowable/flowable-engine · error · FlowableException
An error occurs creating a web-service client for WSDL '" +…
Error message
An error occurs creating a web-service client for WSDL '" + wsdl + "'.
What it means
The CxfWebServiceClient constructor wraps any IOException raised while creating the CXF dynamic client (resource lookup or client creation) in a FlowableException naming the WSDL. It indicates the underlying I/O or resource access failed, not a business-logic problem.
Solutions
- Verify the WSDL URL is reachable and correct (open it in a browser or curl it from the server host).
- Check that the wsdl argument is a well-formed URL; fix scheme/host/port.
- Inspect the wrapped IOException cause for the root error (connection refused, file not found, etc.).
Example fix
// before
new CxfWebServiceClient("http://internal:8080/service?WSDL") // host unreachable
// after
new CxfWebServiceClient("http://correct-host:8080/service?wsdl") // verified reachable Defensive patterns
Strategy: try-catch
Validate before calling
// Verify WSDL reachability before constructing the client URL url = new URL(wsdl); URLConnection conn = url.openConnection(); conn.setConnectTimeout(3000); conn.connect(); // throws early if unreachable
Try / catch
try { new CxfWebServiceClient(wsdl); } catch (FlowableException e) {
Throwable cause = e.getCause();
if (cause instanceof IOException) { log.error("WSDL '{}' unreachable: {}", wsdl, cause.getMessage()); }
throw e;
} Prevention
- Validate WSDL URLs in configuration at startup
- Use a health check against the WSDL endpoint
- Prefer file:/classpath WSDL copies for stability
When it happens
Trigger: new CxfWebServiceClient(wsdl) where loading the WSDL URL or enumerating classpath resources throws IOException (unreachable WSDL URL, malformed URL, I/O error reading resource).
Common situations: WSDL served over HTTP with connection problems, file:// WSDL path missing, network/firewall issues at engine startup when initializing a web-service task.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- couldn't open url
- Error retrieving the JAXB binding definitions
- IO exception occurred
- IO exception occurred
- Unresolved import against " + sourceSystemId
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/d6256112b781ee60.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/CxfWebServiceClient.java:62
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Enumeration<URL> xjcBindingUrls;
try {
xjcBindingUrls = Thread.currentThread().getContextClassLoader()
.getResources(CxfWSDLImporter.JAXB_BINDINGS_RESOURCE);
if (xjcBindingUrls.hasMoreElements()) {
final URL xjcBindingUrl = xjcBindingUrls.nextElement();
if (xjcBindingUrls.hasMoreElements()) {
throw new FlowableException("Several JAXB binding definitions found for flowable-cxf: "
+ CxfWSDLImporter.JAXB_BINDINGS_RESOURCE);
}
this.client = dcf.createClient(wsdl, Arrays.asList(new String[] { xjcBindingUrl.toString() }));
this.client.getRequestContext().put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
} else {
throw new FlowableException("The JAXB binding definitions are not found for flowable-cxf: "
+ CxfWSDLImporter.JAXB_BINDINGS_RESOURCE);
}
} catch (IOException e) {
throw new FlowableException("An error occurs creating a web-service client for WSDL '" + wsdl + "'.", e);
}
}
@Override
public Object[] send(String methodName, Object[] arguments, ConcurrentMap<QName, URL> overridenEndpointAddresses) throws Exception {
try {
URL newEndpointAddress = null;
if (overridenEndpointAddresses != null) {
newEndpointAddress = overridenEndpointAddresses
.get(this.client.getEndpoint().getEndpointInfo().getName());
}
if (newEndpointAddress != null) {
this.client.getRequestContext().put(Message.ENDPOINT_ADDRESS, newEndpointAddress.toExternalForm());
}
return client.invoke(methodName, arguments);
} catch (Fault e) {
LOGGER.debug("Technical error calling WS", e);View on GitHub (pinned to d6d39ce1c6)