flowable/flowable-engine · error · UncheckedException

Unresolved import against " + sourceSystemId

Error message

Unresolved import against " + sourceSystemId

What it means

CxfWSDLImporter.importFrom recursively resolves WSDL <import>/<include> references. When a relative import's systemId cannot be resolved to a local file or URL (the URIResolver yields neither file nor URL), it throws UncheckedException('Unresolved import against <sourceSystemId>'). It means the referenced schema/WSDL could not be located.

Solutions

  1. Fix the import location in the WSDL/XSD so the referenced resource is reachable from the source systemId.
  2. Serve or download the full WSDL bundle (with all imported XSDs) and import from the local root document.
  3. Check network/proxy access if the import points to a remote URL; verify the URL is accessible with curl/browser.

Example fix

// before
factory.createClient("file:/wsdl/service.wsdl"); // imports ../xsd/types.xsd which is missing
// after
// place types.xsd at ../xsd/types.xsd relative to the WSDL, or rewrite the import:
// <xs:import namespace="..." schemaLocation="xsd/types.xsd"/>
Defensive patterns

Strategy: validation

Validate before calling

// resolve and check the import target before invoking the importer
File wsdl = new File("/wsdl/service.wsdl");
if (!wsdl.exists()) throw new IllegalStateException("WSDL missing");
// confirm all schemaLocation targets resolve relative to wsdl.getParentFile()

Try / catch

try {
    importer.importFrom(wsdlUrl);
} catch (UncheckedException e) {
    if (e.getMessage().startsWith("Unresolved import")) {
        // fetch the WSDL bundle (with imports) locally and retry
    }
}

Prevention

When it happens

Trigger: Importing a WSDL whose import/include points to a path or systemId that cannot be resolved — missing file, wrong relative path, or a non-resolvable remote systemId — during DynamicClient creation from a WSDL URL.

Common situations: WSDLs referencing XSDs via relative paths broken when the WSDL is moved; WSDL downloaded without its companion schemas; firewall/offline environments blocking imported remote resources; classpath vs filesystem URL confusion.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at modules/flowable-cxf/src/main/java/org/flowable/engine/impl/webservice/CxfWSDLImporter.java:96

    public CxfWSDLImporter() {
        this.namespace = "";
    }

    @Override
    public void importFrom(Import theImport, String sourceSystemId) {
        this.namespace = theImport.getNamespace() == null ? "" : theImport.getNamespace() + ":";
        try {
            final URIResolver uriResolver = this.createUriResolver(sourceSystemId, theImport);
            if (uriResolver.isResolved()) {
                if (uriResolver.getURI() != null) {
                    this.importFrom(uriResolver.getURI().toString());
                } else if (uriResolver.isFile()) {
                    this.importFrom(uriResolver.getFile().getAbsolutePath());
                } else if (uriResolver.getURL() != null) {
                    this.importFrom(uriResolver.getURL().toString());
                }
            } else {
                throw new UncheckedException(new Exception("Unresolved import against " + sourceSystemId));
            }

        } catch (final IOException e) {
            throw new UncheckedException(e);
        }
    }

    protected URIResolver createUriResolver(String sourceSystemId, Import theImport) throws IOException {
        return new URIResolver(sourceSystemId, theImport.getLocation());
    }

    public void importFrom(String url) {
        this.wsServices.clear();
        this.wsOperations.clear();
        this.structures.clear();

        this.wsdlLocation = url;

View on GitHub (pinned to d6d39ce1c6)