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

  1. Fix descriptorFilePath: use a valid classpath resource name or a well-formed file/http URL.
  2. Ensure the descriptor file is packaged where the parser classloader can see it.
  3. 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


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)