flowable/flowable-engine · error · FlowableException

Error importing ' ' as ' ' (import location, import type)

Error message

Error importing '%s' as '%s' (import location, import type)

What it means

While scanning WSDL imports during process-definition parsing, Flowable instantiates a WSDL importer for each import. If importing the WSDL at the given location with the given import type throws any non-Flowable exception, it is wrapped in this formatted FlowableException carrying the import location and type. A FlowableException from the importer is rethrown unchanged.

Solutions

  1. Check the wrapped cause (getCause()) for the real network/parse failure
  2. Verify the import location URL is correct and reachable from the engine server (curl it)
  3. Confirm the import type string matches what the importer supports (e.g. correct WSDL namespace/type)
  4. Add/fix the required SOAP/WSDL dependencies on the classpath
  5. Fix TLS/truststore issues if the WSDL is served over HTTPS

Example fix

// before
<import location="http://internal-host/service?wsdl" importType="wrongType" />
// after
<import location="http://internal-host/service?wsdl" importType="http://schemas.xmlsoap.org/wsdl/" />
Defensive patterns

Strategy: validation

Validate before calling

URL url = new URL(theImport.getLocation());
HttpURLConnection c = (HttpURLConnection) url.openConnection();
if (c.getResponseCode() != 200) {
    throw new IllegalStateException("WSDL unreachable: " + theImport.getLocation());
}

Try / catch

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

Prevention

When it happens

Trigger: fillImporterInfo processing a WS import whose location URL is unreachable or malformed, the import type is not supported by the chosen importer, the WSDL is invalid, or the importer class fails to initialize (missing dependencies, network error).

Common situations: WSDL hosted on an intranet host unreachable from the engine server; TLS certificate failures; WSDL with schema imports the parser cannot resolve; typo in import location; SOAP library on classpath missing/incompatible.

Related errors


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

Appendix: source

Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/behavior/WebServiceActivityBehavior.java:281

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

            if ("http://schemas.xmlsoap.org/wsdl/".equals(theImport.getImportType())) {
                try {
                    ProcessEngineConfigurationImpl processEngineConfig = CommandContextUtil.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)