{"record":{"id":"8129842099868966","repo":"conductor-oss/conductor","slug":"missing-property-for-connectionstring-or-endpoint","errorCode":null,"errorMessage":"Missing property for connectionString OR endpoint","messagePattern":"Missing property for connectionString OR endpoint","errorType":"exception","errorClass":"NonTransientException","httpStatus":null,"severity":"critical","filePath":"azureblob-storage/src/main/java/com/netflix/conductor/azureblob/storage/AzureBlobPayloadStorage.java","lineNumber":92,"sourceCode":"        String endpoint = properties.getEndpoint();\n        String sasToken = properties.getSasToken();\n\n        BlobContainerClientBuilder blobContainerClientBuilder = new BlobContainerClientBuilder();\n        if (connectionString != null) {\n            blobContainerClientBuilder.connectionString(connectionString);\n            sasTokenCredential = null;\n        } else if (endpoint != null) {\n            blobContainerClientBuilder.endpoint(endpoint);\n            if (sasToken != null) {\n                sasTokenCredential = SasTokenCredential.fromSasTokenString(sasToken);\n                blobContainerClientBuilder.sasToken(sasTokenCredential.getSasToken());\n            } else {\n                sasTokenCredential = null;\n            }\n        } else {\n            String msg = \"Missing property for connectionString OR endpoint\";\n            LOGGER.error(msg);\n            throw new NonTransientException(msg);\n        }\n        blobContainerClient = blobContainerClientBuilder.containerName(containerName).buildClient();\n    }\n\n    /**\n     * @param operation the type of {@link Operation} to be performed\n     * @param payloadType the {@link PayloadType} that is being accessed\n     * @return a {@link ExternalStorageLocation} object which contains the pre-signed URL and the\n     *     azure blob name for the json payload\n     */\n    @Override\n    public ExternalStorageLocation getLocation(\n            Operation operation, PayloadType payloadType, String path) {\n        try {\n            ExternalStorageLocation externalStorageLocation = new ExternalStorageLocation();\n\n            String objectKey;\n            if (StringUtils.isNotBlank(path)) {","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/azureblob-storage/src/main/java/com/netflix/conductor/azureblob/storage/AzureBlobPayloadStorage.java#L74-L110","documentation":"Thrown by the AzureBlobPayloadStorage constructor when neither a connectionString nor an endpoint is supplied in the configuration. Conductor's Azure blob external payload storage needs at least one of these two properties to build a BlobContainerClient. The NonTransientException signals a permanent configuration error that retrying will not fix.","triggerScenarios":"Constructing AzureBlobPayloadStorage with both the 'connectionString' and 'endpoint' config properties null/empty. Happens when conductor.external.payload.storage.* is set to AZURE but the matching connection string or endpoint property is omitted from application properties.","commonSituations":"Switching the external payload storage type to 'azure' without adding 'workflow.external.payload.storage.connectionString' or 'workflow.external.payload.storage.endpoint'. Mis-spelled property keys. Loading a profile that does not include the Azure storage properties (e.g. wrong Spring profile in a container).","solutions":["Set 'workflow.external.payload.storage.connectionString' in your Conductor config to a valid Azure Storage connection string.","Alternatively set 'workflow.external.payload.storage.endpoint' (plus sasToken if using SAS auth) to the blob service endpoint URL.","Double-check the property names for typos and confirm the active Spring profile actually loads them.","Verify the value is present at runtime by logging the resolved AzureBlobConfiguration values on startup."],"exampleFix":"// before\n# application.properties\nworkflow.external.payload.storage.type=azure\n\n# after\nworkflow.external.payload.storage.type=azure\nworkflow.external.payload.storage.connectionString=DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net","handlingStrategy":"validation","validationCode":"// Fail fast at startup if Azure payload storage is enabled without credentials\nboolean azureEnabled = \"azure\".equalsIgnoreCase(cfg.getStorageType());\nif (azureEnabled && (isBlank(cfg.getConnectionString()) && isBlank(cfg.getEndpoint()))) {\n    throw new IllegalStateException(\n        \"AzureBlobPayloadStorage requires connectionString OR endpoint\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate external payload storage config in a @PostConstruct bean so misconfiguration surfaces at boot, not on first payload use.","Keep the Azure storage properties in a dedicated profile and verify it loads in CI.","Document both auth paths (connectionString vs endpoint+SAS) clearly so operators supply one."],"tags":["azure","blob-storage","configuration","external-payload","startup"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}