Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[Feature Request] Extending protovalidate-java to other JVM Protobuf implementations

Open
#80 0 comments 0 reactions 1 assignee View on GitHub

@pkwarren is already working on this.

Since Dec 27, 2023.

Assessment

This issue has not been assessed yet.

Description

Feature

Feature description:

I'd like to generify the Value interface to accommodate validation of Protobuf messages generated by other implementations. Specifically I'd like to implement support for protokt.

Problem it solves or use case:

It would be nice to write another implementation of protovalidate for a JVM language without having to reinvent the wheel or fork this project.

Proposed implementation or solution:

It turns out you don't have to do much to generify this project.

First you change Value to reference a generic "MessageLike" interface. Then from everything that fails to compile, I derived the exact reflection capabilities protovalidate-java requires of a Protobuf runtime:

// This name is subject to change.
interface MessageLike {
    // Whether a message has a field. This can be a standard field or a member of a oneof.
    boolean hasField(FieldDescriptor field);

    // Get the value of a field. This can be a standard field or a member of a oneof.
    Value getField(FieldDescriptor field);
}

Separately the Value interface changes slightly. Sometimes we need to extract the JVM value to verify things in Java code (e.g. Any type URL or enum value); sometimes we need the binding value that the runtime under test should provide to CEL's runtime.

Contribution:

I have already implemented this proposal[1]. My fork passes all conformance tests for protobuf-java and protokt[2]. The branch is a bit sloppy since it's a POC, but the conformance tests can be swapped from the Java implementation to the protokt implementation by changing the main class of the conformance:conformance task from Main to Main2.

https://github.com/andrewparmet/protovalidate-protokt/pull/9

If my changes to the various evaluator classes can be merged here, then I can write a spinoff library that reuses the majority of the implementation code in this project to validate Protokt messages.

As a bonus it would be great to be able to generate the conformance test cases using the protobuf-gradle-plugin from a JAR on Maven Central so I don't have to invoke buf export. Maybe protovalidate-java can bundle them. Protokt manually syncs its conformance proto file with the main protobuf repo so buf export is still better on the whole.

Thanks!

[1] The implementation requires a few changes to protokt found on this branch. merged

[2] With a small set of tests that I think are not actually always possible to cover given a proto3-compliant runtime. These are called out in my branch, but I force them to pass anyways since there's no option to skip them like the Protobuf conformance tests and I didn't want to figure out how to make a failure list for the hack into the existing protovalidate-java conformance runtime. fixed

Additional context:

I'm the author of protokt and the buf-gradle-plugin.

Dominant language
Java
Stars
70
Forks
17
Avg merge
2d 13h
Merged PRs (30d)
13

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from bufbuild/protovalidate-java

All issues in bufbuild/protovalidate-java

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.