Skip to content

Conversation

@specmatic-builder
Copy link
Contributor

@specmatic-builder specmatic-builder commented Oct 30, 2025

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
build.buf:protovalidate 0.2.1 -> 1.1.0 age adoption passing confidence

Release Notes

bufbuild/protovalidate-java (build.buf:protovalidate)

v1.1.0

This release is compatible with the v1.1.0 release of Protovalidate.

What's Changed

Full Changelog: bufbuild/protovalidate-java@v1.0.1...v1.1.0

v1.0.1

What's Changed

New Contributors

Full Changelog: bufbuild/protovalidate-java@v1.0.0...v1.0.1

v1.0.0

Protovalidate is now v1.0

After two years of development, Protovalidate has reached v1.0, marking our commitment to stability and production readiness.
Read more in our blog post. Get started at https://protovalidate.com.

What's Changed

There are no functional changes compared to the previous release.

Full Changelog: bufbuild/protovalidate-java@v0.14.0...v1.0.0

v0.14.0

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.13.0...v0.14.0

v0.13.0

This release is compatible with the v0.14.0 release of Protovalidate.

Breaking changes

We want validation rules to be easy to understand for authors and consumers. To simplify Protovalidate, we are renaming an option and remove two others. This is a breaking change, and you will have to update your Protobuf files if they use the relevant options :

  • IGNORE_IF_UNPOPULATED is renamed to IGNORE_IF_ZERO_VALUE.
    See bufbuild/protovalidate#397 for details.
  • (buf.validate.message).disabled is removed.
    You can replace it by adding IGNORE_ALWAYS to every field of the message. See bufbuild/protovalidate#394 for details.
  • IGNORE_IF_DEFAULT_VALUE is removed.
    In most cases, you can replace it with IGNORE_IF_ZERO_VALUE. See bufbuild/protovalidate#396 for details.

Full Changelog: bufbuild/protovalidate-java@v0.12.0...v0.13.0

v0.12.0

This release is compatible with the v0.13.3 release of Protovalidate.

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.11.0...v0.12.0

v0.11.0

This release is compatible with the v0.13.0 release of Protovalidate.

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.10.0...v0.11.0

v0.10.0

What's Changed

The underlying CEL implementation used by protovalidate-java has been changed to Google's cel-java. There are no breaking changes as a result and all modifications should be internal to this library.

Full Changelog: bufbuild/protovalidate-java@v0.9.1...v0.10.0

v0.9.1

What's Changed

This is a maintenance update that includes an important bug fix: in some situations, the CEL environment does not correctly get populated with its dependencies; specifically, when an expression refers to a submessage whose dependency is in a non-public import, it will not be added to the CEL environment.

Full Changelog: bufbuild/protovalidate-java@0.9.0...v0.9.1

v0.9.0

Breaking Changes

String formatting is now conformant with the CEL spec.

As a result, some formatting output may differ from previous versions. See #​293, #​294, and #​295 for details on formatting changes.

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.8.0...v0.9.0

v0.8.0

Breaking Changes

New API for creating a validator.

Validators are now created via ValidatorFactory using a builder pattern. To migrate, users should make the following changes:

With no config

import build.buf.protovalidate.Validator; + import build.buf.protovalidate.ValidatorFactory; - Validator validator = new Validator(); + Validator validator = ValidatorFactory.newBuilder().build();

With config

import build.buf.protovalidate.Validator; + import build.buf.protovalidate.ValidatorFactory; Config cfg = Config.newBuilder().setFailFast(true).build(); - Validator validator = new Validator(cfg); + Validator validator = ValidatorFactory.newBuilder().withConfig(cfg).build();

Also note that the returned type is an interface (still named Validator) and no longer a concrete class.

In addition to the above change, users can now seed the validator with descriptors for warming up the cache. To do so, use the buildWithDescriptors method on the builder. The signature is:

buildWithDescriptors(List<Descriptor>, boolean disableLazy) throws CompilationException, InvalidStateException;

An example creating a validator with seed descriptors:

MyMessage msg = MyMessage.newBuilder().build(); List<Descriptor> seedDescriptors = new ArrayList<Descriptor>(); seedDescriptors.add(msg.getDescriptorForType()); try { Validator validator = ValidatorFactory.newBuilder().buildWithDescriptors(seedDescriptors, false); // Note you can also create a validator with a config // Validator validator = ValidatorFactory.newBuilder().withConfig(cfg).buildWithDescriptors(seedDescriptors, false); // Also note that the buildWithDescriptors function is what throws the exception so the validator  // builder can be created ahead of time with no need for catching an exception. } catch (CompilationException ce) { // Exception pre-warming the cache with the seed descriptors } catch (IllegalStateException ise) { // This is thrown if seedDescriptors is empty and disableLazy is true }

For more context on the changes, see PR #​283.

ValidationResult.toString output changed

The toString method of ValidationResult will now print Validation OK if there are no violations. Previously, this text was always Validation error: regardless of whether there were any actual violations.

Protovalidate Compatibility

This release is compatible with Protovalidate v0.11.1.

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.7.2...v0.8.0

v0.7.2

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.7.1...v0.7.2

v0.7.1

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.7.0...v0.7.1

v0.7.0

Breaking Changes

  • The most notable change is that the validation for IP addresses and prefixes (both v4 and v6), email addresses, and URIs has been significantly enhanced to adhere to the relevant RFCs for each. Note that these tighter validations result in breaking changes as some previously-passing values may now be failures. Additionally, with regards to string.email/isEmail validation, we no longer follow RFC 5322 and instead use the HTML standard's definition for valid email addresses.

    • For more context on the validation changes and conformance tests added, see the corresponding PR in Protovalidate: bufbuild/protovalidate#320.

    • For full details of the validation changes as they apply to protovalidate-java, see #​258.

  • In addition, all references to the usage of constraint have been changed to rule. Previously, these were used interchangeably which led to some confusion. The v0.11.0 release of Protovalidate contains this full rename, which necessitated the change in protovalidate-java and was implemented in #​273. As a result, any reference to constraint in code will need to be changed to rule.

What's Changed

This release is compatible with Protovalidate v0.11.0.

Full Changelog: bufbuild/protovalidate-java@v0.6.0...v0.7.0

v0.6.0

Breaking Changes

The internal package has been removed. The APIs exposed in internal were never considered to be public, but were nonetheless possible for external packages to import. This is no longer possible. If you were relying on an API that was exposed via internal, please file an issue.

What's Changed

New Contributors

Full Changelog: bufbuild/protovalidate-java@v0.5.0...v0.6.0

v0.5.0

Breaking Changes

The build.buf.protovalidate.ValidationResult.getViolations() method no longer returns a list of protobuf build.buf.validate.Violations messages, but a list of a new wrapper class, build.buf.protovalidate.Violation. In most cases, changing the import for Violation and calling the toProto() method of the violation is all that needs to be done:

 // Note that the import should also change from `build.buf.validate.Violation` // to `build.buf.protovalidate.Violation`. for (Violation violation : validator.validate(msg).getViolations()) { - System.out.println(violation.getConstraintId()); + System.out.println(violation.toProto().getConstraintId()); }

ValidationResult also has a toProto() method that returns the protobuf build.buf.validate.Violations message equivalent. This can be used to get a list of protobuf build.buf.validate.Violation messages, using the getViolationsList() getter of said message, as before.

+ List<build.buf.validate.Violation> violations = validator.validate(msg).getViolations(); - List<build.buf.validate.Violation> violations = validator.validate(msg).toProto().getViolationsList();

The new build.buf.protovalidate.Violation class provides additional getters for in-memory information about the violation which cannot be serialized to the wire:

  • getFieldValue(): Returns the value of the field failing validation, if there is a field corresponding to the violation.
  • getRuleValue(): Returns the value of the rule failing validation, if there is a rule corresponding to the violation.

Take, for example, the following protobuf message schema:

message User { string email = 1 [(buf.validate.field).string.email = true]; }

If you try to validate the message User.newBuilder().setEmail("invalid").build(), getFieldValue().getValue() will return "invalid" and getRuleValue().getValue() will return true.

Some violations do not correspond directly to a field, such as a message constraint failure; in these cases, the return value of getFieldValue() will be null.

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.4.2...v0.5.0

v0.4.2

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.4.1...v0.4.2

v0.4.1

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.4.0...v0.4.1

v0.4.0

Adds support for custom predefined field constraints. See the protovalidate documentation for more information.

Updates protovalidate to v0.8.1. Note that this is a breaking change. You may need to make some adjustments to your code:

  • Code that imports build.buf.validate.ExpressionProto or build.buf.validate.priv.PrivateProto should now only import build.buf.validate.ValidateProto.
  • build.buf.validate.priv.PrivateProto.field was moved to build.buf.validate.ValidateProto.predefined

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.3.2...v0.4.0

v0.3.2

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.3.1...v0.3.2

v0.3.1

What's Changed

New Contributors

Full Changelog: bufbuild/protovalidate-java@v0.3.0...v0.3.1

v0.3.0

[!NOTE]
This release updates protovalidate-java to use Protobuf Java v4+, which is not currently completely compatible with Protobuf Java v3 gencode. If you can not upgrade to Protobuf Java v4 currently, you should continue to use protovalidate-java v0.2.1 or lower for now. A future release of Protobuf Java v4.27.x should allow for an easier transition.

What's Changed

Full Changelog: bufbuild/protovalidate-java@v0.2.1...v0.3.0


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot. Specmatic specific configuration is managed here.

@specmatic-builder specmatic-builder force-pushed the renovate/build.buf-protovalidate-1.x branch from 1efca95 to aa65399 Compare October 30, 2025 19:14
@specmatic-builder specmatic-builder force-pushed the renovate/build.buf-protovalidate-1.x branch from aa65399 to e9a215d Compare November 17, 2025 06:29
@specmatic-builder specmatic-builder force-pushed the renovate/build.buf-protovalidate-1.x branch 5 times, most recently from 469e04c to cd744e9 Compare December 9, 2025 19:20
@specmatic-builder specmatic-builder force-pushed the renovate/build.buf-protovalidate-1.x branch from cd744e9 to fa61dbe Compare December 14, 2025 18:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

1 participant