quarkusio/quarkus · error · RuntimeException

RuntimeException(e)

Error message

RuntimeException(e)

What it means

quarkus grpc describe command reads the served FileDescriptorProto bytes and pretty-prints them with JsonFormat. Any checked exception during parsing or printing is rethrown as an unchecked RuntimeException(e) so the picocli command aborts with a stack trace. The root cause is preserved as the cause.

Source

Thrown at extensions/grpc/cli/src/main/java/io/quarkus/grpc/cli/DescribeCommand.java:38

    }

    @Override
    protected void execute(MutinyServerReflectionGrpc.MutinyServerReflectionStub stub) {
        ServerReflectionRequest request = ServerReflectionRequest
                .newBuilder()
                .setFileContainingSymbol(unmatched.get(1))
                .build();
        Multi<ServerReflectionResponse> response = stub.serverReflectionInfo(Multi.createFrom().item(request));
        response.toUni().map(r -> {
            List<ByteString> list = r.getFileDescriptorResponse().getFileDescriptorProtoList();
            for (ByteString bs : list) {
                try {
                    DescriptorProtos.FileDescriptorProto fdp = DescriptorProtos.FileDescriptorProto.parseFrom(bs);
                    log(JsonFormat.printer().print(fdp));
                } catch (RuntimeException e) {
                    throw e;
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
            return null;
        }).await().indefinitely();
    }
}

View on GitHub (pinned to e1c734241f)

Solutions

  1. Inspect the caused-by stack trace to find the real parse/print error
  2. Verify the target server supports gRPC server reflection and the host/port are correct
  3. Retry the command against a known-good service to rule out environment/proxy issues

Example fix

// before
} catch (Exception e) {
    throw new RuntimeException(e);
}
// after
} catch (Exception e) {
    throw new RuntimeException("Failed to describe service: invalid descriptor from server", e);
}
Defensive patterns

Strategy: try-catch

Try / catch

try {
    quarkus.grpc.describe MyService;
} catch (RuntimeException e) {
    Throwable root = e;
    while (root.getCause() != null) root = root.getCause();
    System.err.println("describe failed: " + root.getMessage());
}

Prevention

When it happens

Trigger: Running `quarkus grpc describe <service>` against a server whose descriptor bytes are corrupt/unparseable (parseFrom fails), or JsonFormat.printer().print(fdp) fails on an unexpected proto configuration.

Common situations: Pointing the CLI at a non-gRPC-reflection endpoint that returns garbage bytes; TLS/proxy tampering with the response; mismatched protobuf runtime versions between CLI and server.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/3e2da6ad31bff610. Report an issue: GitHub.