flowable/flowable-engine · error · FlowableException

invalid url

Error message

invalid url: <resourceUrl>

What it means

AppEngines.retry(resourceUrl) re-initializes an engine from a previously discovered resource URL string. If the string cannot be parsed into a java.net.URL (MalformedURLException), retry throws this FlowableException. It indicates the resourceUrl argument is not a valid URL.

Solutions

  1. Pass exactly the value returned by EngineInfo.getResourceUrl(), not a file path or engine name.
  2. Ensure the string is absolute and includes a scheme (file:, jar:, etc.).
  3. Prepend "file:" if you have a plain absolute filesystem path you intend to use as a URL.
  4. Get the list of valid URLs from AppEngines.getAppEngineInfos() and retry one of those.

Example fix

// before
AppEngines.retry("flowable.app.cfg.xml");
// after
AppEngines.retry(info.getResourceUrl()); // e.g. "file:/app/config/flowable.app.cfg.xml"
Defensive patterns

Strategy: validation

Validate before calling

private static boolean isValidUrl(String s) {
    try { new URL(s); return true; } catch (MalformedURLException e) { return false; }
}
// call: if (isValidUrl(resourceUrl)) AppEngines.retry(resourceUrl);

Type guard

static boolean isAbsoluteUrl(String s) { return s != null && s.matches("^[a-zA-Z][a-zA-Z0-9+.-]*:.*"); }

Try / catch

try { AppEngines.retry(resourceUrl); } catch (FlowableException e) {
    log.error("Not a valid URL: " + resourceUrl, e);
}

Prevention

When it happens

Trigger: Calling AppEngines.retry("some-string") where the string is not an absolute, well-formed URL (e.g. a plain file path, empty string, or a resource name instead of the URL stored in EngineInfo.getResourceUrl()).

Common situations: Passing an engine name or file path instead of the URL from EngineInfo;手工 editing stored URLs; losing the URL scheme (file:/jar:) when persisting engine info.

Understand the failure class

Background: "Invalid URL" errors: why new URL(), URI.parse, and reqwest::Url reject your string — missing scheme, whitespace, and bad path format — this error's family across 39 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/53398534a87f68ad. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-app-engine/src/main/java/org/flowable/app/engine/AppEngines.java:204

     * @param appEngineName
     *            is the name of the app engine or null for the default app engine.
     */
    public static AppEngine getAppEngine(String appEngineName) {
        if (!isInitialized()) {
            init();
        }
        return appEngines.get(appEngineName);
    }

    /**
     * retries to initialize an app engine that previously failed.
     */
    public static EngineInfo retry(String resourceUrl) {
        LOGGER.debug("retying initializing of resource {}", resourceUrl);
        try {
            return initAppEngineFromResource(new URL(resourceUrl));
        } catch (MalformedURLException e) {
            throw new FlowableException("invalid url: " + resourceUrl, e);
        }
    }

    /**
     * provides access to app engine to application clients in a managed server environment.
     */
    public static Map<String, AppEngine> getAppEngines() {
        return appEngines;
    }

    /**
     * closes all app engines. This method should be called when the server shuts down.
     */
    public static synchronized void destroy() {
        if (isInitialized()) {
            Map<String, AppEngine> engines = new HashMap<>(appEngines);
            appEngines = new HashMap<>();

View on GitHub (pinned to d6d39ce1c6)