flowable/flowable-engine · error · FlowableIllegalArgumentException
couldn't open url
Error message
couldn't open url '${url}' What it means
Thrown by UrlStreamSource.getInputStream() when URL.openStream() raises an IOException — the URL resource could not be opened (connection failure, unknown host, file not found, protocol issues). FlowableIllegalArgumentException wraps the original IOException.
Solutions
- Open the URL in a browser/curl to confirm it is reachable
- Fix typos or scheme errors in the configured URL
- Check network connectivity, proxy, and firewall settings
- If it's a file URL, verify the file exists and is readable
Example fix
// before
new UrlStreamSource(new URL("http://repo.example.com/missing.bpmn20.xml"))
// after
new UrlStreamSource(new URL("http://repo.example.com/processes/order.bpmn20.xml")) Defensive patterns
Strategy: try-catch
Validate before calling
try (InputStream probe = url.openStream()) {
if (probe.read() == -1) throw new IllegalStateException("URL resource is empty: " + url);
} catch (IOException e) {
throw new IllegalStateException("URL not reachable before use: " + url, e);
} Type guard
boolean isReachable(URL url) {
try (InputStream in = url.openStream()) { return in.read() != -1; }
catch (IOException e) { return false; }
} Try / catch
try {
InputStream is = urlSource.getInputStream();
} catch (FlowableIllegalArgumentException e) {
logger.error("Cannot open resource URL: " + e.getMessage(), e.getCause());
} Prevention
- Validate URLs with a connectivity probe before configuring them
- Check scheme support (http/https/file) and DNS resolution
- Account for proxies/firewalls in deployment environments
When it happens
Trigger: getInputStream() is called on a UrlStreamSource whose URL is unreachable: connection refused, DNS failure, 404/500 on HTTP resource, or an unsupported protocol handler.
Common situations: Process deployments referencing remote BPMN resources whose server is down; file:// URLs pointing to missing files; typos in configured resource URLs; proxies/firewalls blocking the connection.
Understand the failure class
Background: "Invalid URL" / "URL cannot be empty": fix the malformed or missing URL behind request-construction failures — this error's family across 50 libraries.
Related errors
- An error occurs creating a web-service client for WSDL '" +…
- IO exception occurred
- IO exception occurred
- Bundle cannot be generated
- byte array for resource
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/88a1414cb8485975.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/util/io/UrlStreamSource.java:38
import org.flowable.common.engine.api.FlowableIllegalArgumentException;
/**
* @author Tom Baeyens
*/
public class UrlStreamSource implements StreamSource {
URL url;
public UrlStreamSource(URL url) {
this.url = url;
}
@Override
public InputStream getInputStream() {
try {
return new BufferedInputStream(url.openStream());
} catch (IOException e) {
throw new FlowableIllegalArgumentException("couldn't open url '" + url + "'", e);
}
}
}
View on GitHub (pinned to d6d39ce1c6)