apache/druid · error · ParseException
Descriptor not found in class path or malformed URL
Error message
Descriptor not found in class path or malformed URL: [%s]
What it means
Descriptor-loading failure in FileBasedProtobufBytesDecoder.loadFileDescriptorSet: the configured descriptorFilePath was found neither on the classpath nor as a parseable URL (the URL constructor threw MalformedURLException), so no protobuf descriptor can be loaded for decoding.
Solutions
- Fix descriptorFilePath: use a valid classpath resource name or a well-formed file/http URL.
- Ensure the descriptor file is packaged where the parser classloader can see it.
- Verify the file exists and is readable at the given path.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/FileBasedProtobufBytesDecoder.java:71 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/60bd7123b5c915ab.
Report an issue: GitHub.
Appendix: source
Thrown at extensions-core/protobuf-extensions/src/main/java/org/apache/druid/data/input/protobuf/FileBasedProtobufBytesDecoder.java:71
public String getDescriptorFilePath()
{
return descriptorFilePath;
}
@Override
protected DescriptorProtos.FileDescriptorSet loadFileDescriptorSet()
{
InputStream fin;
DescriptorProtos.FileDescriptorSet descriptorSet;
try {
fin = this.getClass().getClassLoader().getResourceAsStream(descriptorFilePath);
if (fin == null) {
URL url;
try {
url = new URL(descriptorFilePath);
}
catch (MalformedURLException e) {
throw new ParseException(
descriptorFilePath,
e,
"Descriptor not found in class path or malformed URL: [%s]", descriptorFilePath
);
}
try (InputStream urlIn = url.openConnection().getInputStream()) {
if (urlIn == null) {
throw new ParseException(
descriptorFilePath,
"Descriptor not found at URL: [%s]", descriptorFilePath
);
}
descriptorSet = DescriptorProtos.FileDescriptorSet.parseFrom(urlIn);
}
} else {
descriptorSet = DescriptorProtos.FileDescriptorSet.parseFrom(fin);
}
View on GitHub (pinned to 9b90983fd2)