{"record":{"id":"142d6a7f9c643377","repo":"quarkusio/quarkus","slug":"illegal-path","errorCode":null,"errorMessage":"Illegal path: ","messagePattern":"Illegal path: ","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"extensions/observability-devservices/testcontainers/src/main/java/io/quarkus/observability/testcontainers/GrafanaUtils.java","lineNumber":56,"sourceCode":"            provider.put(\"type\", \"file\");\n            Map<String, Object> options = new LinkedHashMap<>();\n            options.put(\"path\", \"/otel-lgtm/\" + s);\n            options.put(\"foldersFromFilesStructure\", false);\n            provider.put(\"options\", options);\n            providers.add(provider);\n\n            consumer.accept(s);\n        });\n\n        StringWriter writer = new StringWriter();\n        yaml.dump(data, writer);\n\n        return writer.toString();\n    }\n\n    private static String toName(String path) {\n        if (path.isEmpty()) {\n            throw new IllegalArgumentException(\"Illegal path: \" + path);\n        }\n        StringBuilder name = new StringBuilder();\n        boolean dash = true;\n        for (int i = 0; i < path.length(); i++) {\n            char ch = path.charAt(i);\n            if (dash) {\n                ch = Character.toUpperCase(ch);\n                dash = false;\n            } else {\n                if (ch == '-') {\n                    dash = true;\n                    ch = ' ';\n                }\n            }\n            name.append(ch);\n        }\n        return name.toString();\n    }","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/observability-devservices/testcontainers/src/main/java/io/quarkus/observability/testcontainers/GrafanaUtils.java#L38-L74","documentation":"GrafanaUtils.toName() converts a dashboard/asset file path into a Grafana-friendly resource name. An empty path cannot be turned into a name, so an IllegalArgumentException is thrown. This indicates the caller passed an empty string where a file path was expected.","triggerScenarios":"Calling name(...) (which delegates to toName) with an empty path string — e.g. an empty property, unfilled config value, or empty file path list entry used when provisioning Grafana dashboards.","commonSituations":"Observability dev services config where the dashboard path property is empty or unset; programmatically built path lists containing empty strings.","solutions":["Set the Grafana dashboard/config path to a non-empty valid path","Check the configuration property feeding the path is actually populated","Filter empty entries out of any path collection before passing to GrafanaUtils"],"exampleFix":"// before\nString name = GrafanaUtils.name(\"\");\n// after\nString name = path == null || path.isEmpty() ? \"default-dashboard\" : GrafanaUtils.name(path);","handlingStrategy":"validation","validationCode":"if (path == null || path.isEmpty()) throw new IllegalArgumentException(\"Dashboard path must be non-empty\");","typeGuard":"static boolean isValidPath(String p) { return p != null && !p.isEmpty(); }","tryCatchPattern":"try { name = GrafanaUtils.name(path); } catch (IllegalArgumentException e) { name = FALLBACK_NAME; }","preventionTips":["Validate config-provided paths at startup","Filter empty strings from path collections","Fail fast with clear config error messages"],"tags":["config","grafana","devservices"],"backgroundTag":"empty-path-config","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}