flowable/flowable-engine · error · FlowableException

Error importing ' ' as

Error message

Error importing '%s' as '%s'

What it means

Thrown in WebServiceActivityBehavior.fillImporterInfo() when importing a WSDL (or other declared import) fails with an unexpected exception. Non-FlowableException failures during importer execution (I/O, parsing, reflection errors) are wrapped in a FlowableException carrying the import location and import type, with the original exception as cause.

Solutions

  1. Inspect the cause exception to find the real failure (connection refused, parse error, 404) and fix that
  2. Verify the import location URL is reachable and correct from the engine's host
  3. Fix the WSDL so it parses (resolve all its own schema imports, valid XML)
  4. Provide local copies of the WSDL/schema and correct the import location, or check proxy/network settings

Example fix

<!-- before (unreachable location) -->
<import importType="http://schemas.xmlsoap.org/wsdl/" location="http://internalhost:8080/service?wsdl" namespace="http://example.com" />
<!-- after (corrected/reachable location) -->
<import importType="http://schemas.xmlsoap.org/wsdl/" location="http://prodhost:8080/service?wsdl" namespace="http://example.com" />
Defensive patterns

Strategy: try-catch

Validate before calling

// before deployment: verify each import location is reachable
new URL(theImport.getLocation()).openStream().close();

Try / catch

try {
    deploymentBuilder.deploy();
} catch (FlowableException e) {
    if (e.getMessage().startsWith("Error importing")) {
        logger.error("WSDL import failed for location; cause:", e.getCause());
    }
    throw e;
}

Prevention

When it happens

Trigger: Parsing a BPMN model whose <definitions> declares an <import> (importType e.g. WSDL) and the importer for that location throws a non-Flowable exception — unreadable WSDL URL, malformed WSDL, missing schema, network failure.

Common situations: WSDL at an unreachable URL or behind authentication; WSDL with schema imports that cannot be resolved offline; wrong namespace/location attributes after moving services; DNS/proxy issues at deploy time.

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


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

Appendix: source

Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/WebServiceActivityBehavior.java:289

        if (!xmlImporterMap.containsKey(theImport.getNamespace())) {

            if ("http://schemas.xmlsoap.org/wsdl/".equals(theImport.getImportType())) {
                try {
                    ProcessEngineConfigurationImpl processEngineConfig = Context.getProcessEngineConfiguration();
                    XMLImporter importerInstance = processEngineConfig.getWsdlImporterFactory()
                            .createXMLImporter(theImport);

                    xmlImporterMap.put(theImport.getNamespace(), importerInstance);
                    importerInstance.importFrom(theImport, sourceSystemId);

                    structureDefinitionMap.putAll(importerInstance.getStructures());
                    wsServiceMap.putAll(importerInstance.getServices());
                    wsOperationMap.putAll(importerInstance.getOperations());

                } catch (FlowableException e) {
                    throw e;
                } catch (Exception e) {
                    throw new FlowableException(String.format("Error importing '%s' as '%s'", theImport.getLocation(),
                            theImport.getImportType()), e);
                }

            } else {
                throw new FlowableException(String.format("Unsupported import type '%s'", theImport.getImportType()));
            }
        }
    }

    protected void returnMessage(List<DataAssociation> dataOutputAssociations, DelegateExecution execution) {
        for (DataAssociation dataAssociationElement : dataOutputAssociations) {
            AbstractDataAssociation dataAssociation = createDataOutputAssociation(dataAssociationElement);
            dataAssociation.evaluate(execution);
        }
    }

    protected void fillMessage(List<DataAssociation> dataInputAssociations, DelegateExecution execution) {
        for (DataAssociation dataAssociationElement : dataInputAssociations) {

View on GitHub (pinned to d6d39ce1c6)