{"record":{"id":"07fe62bf849978b8","repo":"conductor-oss/conductor","slug":"the-provided-routing-key-is-empty","errorCode":null,"errorMessage":"The provided routing key is empty","messagePattern":"The provided routing key is empty","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"amqp/src/main/java/com/netflix/conductor/contribs/queue/amqp/util/AMQPSettings.java","lineNumber":205,"sourceCode":"                                    if (kv.length == 2) {\n                                        if (kv[0].equalsIgnoreCase(\n                                                String.valueOf(PARAM_EXCHANGE_TYPE))) {\n                                            String value = kv[1];\n                                            if (StringUtils.isEmpty(value)) {\n                                                throw new IllegalArgumentException(\n                                                        \"The provided exchange type is empty\");\n                                            }\n                                            exchangeType = value;\n                                        }\n                                        if (kv[0].equalsIgnoreCase(\n                                                (String.valueOf(PARAM_QUEUE_NAME)))) {\n                                            exchangeBoundQueueName = kv[1];\n                                        }\n                                        if (kv[0].equalsIgnoreCase(\n                                                (String.valueOf(PARAM_ROUTING_KEY)))) {\n                                            String value = kv[1];\n                                            if (StringUtils.isEmpty(value)) {\n                                                throw new IllegalArgumentException(\n                                                        \"The provided routing key is empty\");\n                                            }\n                                            routingKey = value;\n                                        }\n                                        if (kv[0].equalsIgnoreCase(\n                                                (String.valueOf(PARAM_DURABLE)))) {\n                                            durable = Boolean.parseBoolean(kv[1]);\n                                        }\n                                        if (kv[0].equalsIgnoreCase(\n                                                (String.valueOf(PARAM_EXCLUSIVE)))) {\n                                            exclusive = Boolean.parseBoolean(kv[1]);\n                                        }\n                                        if (kv[0].equalsIgnoreCase(\n                                                (String.valueOf(PARAM_AUTO_DELETE)))) {\n                                            autoDelete = Boolean.parseBoolean(kv[1]);\n                                        }\n                                        if (kv[0].equalsIgnoreCase(\n                                                (String.valueOf(PARAM_DELIVERY_MODE)))) {","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/amqp/src/main/java/com/netflix/conductor/contribs/queue/amqp/util/AMQPSettings.java#L187-L223","documentation":"Thrown as IllegalArgumentException inside fromURI's query-param loop when the routingKey parameter is present but its value is empty (e.g. &routingKey=). A topic/direct exchange publish needs a routing key, so the parser rejects an explicitly empty one.","triggerScenarios":"An amqp_exchange URI containing routingKey= with no value. Fires when the param key matches PARAM_ROUTING_KEY and StringUtils.isEmpty(value) is true.","commonSituations":"Templated routingKey=${event} with the variable unset; URI edited and the routing key value deleted; relying on a default but still emitting an empty param.","solutions":["Provide a non-empty routing key: routingKey=myRoutingKey.","Omit the routingKey param entirely if a blank key is not intended.","Ensure any placeholder feeding routingKey resolves to a non-empty string."],"exampleFix":"// before\namqp_exchange:myExchange?exchangeType=topic&routingKey=\n// after\namqp_exchange:myExchange?exchangeType=topic&routingKey=conductor.events","handlingStrategy":"validation","validationCode":"String uri = \"amqp_exchange:myExchange?exchangeType=topic&routingKey=\" + routingKey;\nif (StringUtils.isBlank(routingKey)) {\n    throw new IllegalArgumentException(\"routingKey param must be non-empty in AMQP URI\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Provide a non-empty routing key when including the routingKey param.","Drop the param rather than emitting routingKey= empty.","Ensure placeholders feeding routingKey resolve to non-empty strings."],"tags":["amqp","configuration","validation","uri"],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}