While a couple of months have passed since Bean Validation 2.0 got released, the info about what’s new in the spec may still not yet have reached everyone. Here are two presentations which I wanted to share in order to help with that.
The first one is the slide set of the talk on Bean Validation 2.0 and JSR 380 which I did at JavaOne 2017:
You can also download a PDF with these slides from Speaker Deck here.
While the JavaOne session was not recorded, my quickie session on the same topic at Devoxx 2017 luckily was. In just 14:17 min you’ll get an overview on the new spec revision. It’s lots of contents for the short amount of time, but you can pause and rewind as often as you like ;)
Feedback
You got feedback on these presentations or just have a general question around Bean Validation? Then let us know by adding a comment below or sending a message to the Bean Validation mailing list.
While at the moment no work on the spec itself is going on, we’re eager to explore new features in the reference implementation. So if there’s something which you think should be added in a future spec revision, it’s the perfect time to get in touch so we can begin to experiment with these things.
Your feature requests (and pull requests) will be highly welcomed!
Bean Validation just got a new website and we hope you will like it!
New layout
We developed a more modern layout based on Semantic UI.
It should be easier to the eye and more readable too.
The logo, contributed by Hendrik Ebbers for Bean Validation 2.0, is now in good place.
New organization
In the old website, the information about a given version of the spec was spread over multiple pages. It was hard for the user to get an overview of a given version and it was also hard for us to work on new versions of the spec.
We changed the website organization to centralize all the information of a spec release on one page.
See for instance:
The main changes, the TCK and the certified implementations are all accessible from these landing pages.
A bright future
The last version of the spec has a prominent link in the menu and you can find the old versions of the spec in the archives.
Presenting a new version of the spec should be easier than ever. That was our ultimate goal.
Feedback
As usual, if you have some feedback or if you find an issue in the new website, either add a comment just below or post something on the Bean Validation mailing list.
It is done — after one year of hard work, and a bit more than four years after the previous revision, the final release of Bean Validation 2.0 (JSR 380) is out!
Last week, the JSR passed the Final Approval Ballot by the executive committee of the JCP unanimously with 25 "Yes" votes. After the ballot we’ve released version 2.0.0.Final of the specification, the API as well as the TCK. At the same time, the final version of the reference implementation, Hibernate Validator 6, was released, too.
Within the next few days, the final specification will also be available on the JSR 380 page on jcp.org, after which the work on this JSR is complete and the expert group officially will disband.
What’s new in Bean Validation 2.0?
By now, you’ll probably have heard about all the new features added in Bean Validation 2.0. Just in case you haven’t, here’s a quick summary:
-
Support for validating container elements by annotating type arguments of parameterized types, e.g.
List<@Positive Integer> positiveNumbers
; this also includes:-
More flexible cascaded validation of collection types; e.g. values and keys of maps can be validated now:
Map<@Valid CustomerType, @Valid Customer> customersByType
-
Support for
java.util.Optional
-
Support for the property types declared by JavaFX
-
Support for custom container types by plugging in additional value extractors
-
-
Support for the JSR 310 date/time types for
@Past
and@Future
; fine-grained control over the current time and time zone used for validation -
New built-in constraints:
@Email
,@NotEmpty
,@NotBlank
,@Positive
,@PositiveOrZero
,@Negative
,@NegativeOrZero
,@PastOrPresent
and@FutureOrPresent
-
All built-in constraints are marked as repeatable
-
Parameter names are retrieved using reflection
-
ConstraintValidator#initialize()
is a default method
Bean Validation 2.0 will also be part of the Java EE 8 platform, to be released later this summer.
To learn more about all the new features in Bean Validation 2.0, check out this presentation which I recently gave at the jdk.io conference.
Thank you!
I’d like to shout out a huge "Thank you" to everyone helping with the work on Bean Validation 2.0:
-
The fantastic JSR 380 expert group (thanks to Christian, Hendrik, Marco, Otavio and everyone else for their great input, proposals and much more) as well as the BV community at large (thanks to Hardy, Matt and everyone else for making themselves heard and providing feedback)
-
The former spec lead Emmanuel for his continued support with everything JCP-related and going through the details of container element validation again and again
-
My dear fellow Guillaume for his tireless work on the TCK, the reference implementation, the website and the spec; merci beaucoup!
-
Marko Bekhta who stepped up to work on the TCK which has been a very much appreciated contribution
-
Everyone participating in our polls and surveys; your replies and comments helped very much to arrive on good decisions on the different options on the table
-
The friendly folks of Oracle’s GlassFish team for all their work on integrating Bean Validation 2.0 into the Java EE 8 reference implementation
It has been a true pleasure and honor for me to make the new spec a reality together with such a fantastic community!
Give it a try
Don’t wait and try out the new release yourself! Just download the reference implementation Hibernate Validator and read the Getting started section of its reference guide. You also can read the complete specification as well as the API docs.
It’s my great pleasure to announce the CR 3 release of the Bean Validation 2.0 spec!
This release of the spec and the API as well as accompanying releases of the TCK and the reference implementation (release announcement) have been handed over to the JCP for the Final Approval Ballot last night. It’s this ballot where the Executive Committee of the JCP will cast its final go/no-go vote on the Bean Validation 2.0 JSR.
Since the CR 2 release, only a few things have changed after reviewing the spec changes one more time:
-
Clarifying the semantics of
ConstraintViolation#getLeafBean()
in case a container element constraint is violated (BVAL-690) -
Making the order of the
<container-element-type>
and<constraint>
elements consistent in the schema for XML constraint mapping files (BVAL-693) -
Minor wording and JavaDoc improvements (BVAL-692)
The updated spec document can be found here. To see the changes applied since the CR 2, check out this colored diff. If you’d like to see all the changes since Bean Validation 1.1, take a look at this diff. The updated API is available on Maven Central, using the GAV coordinates are javax.validation:validation-api:2.0.0.CR3.
Some TCK stats
Thanks to Guillaume’s tireless work, the Bean Validation TCK has grown substantially since 1.1. There are now 685 assertions overall, out of which 627 are testable. 99.04% of them are covered by 2133 tests overall. The added tests cover all the new Bean Validation 2.0 features, so we feel very confident that the TCK ensures correctness of implementations passing it.
Also the tooling for producing the TCK has been improved significantly: sentences or phrases of the spec document can be marked as relevant for the TCK with the help of AsciiDoc roles. A special Maven plug-in then is used to generate a report of all those marked assertions, allowing to link them to tests of the TCK and making it easy to identify assertions without corresponding tests yet.
We’ll discuss the entire TCK tool chain in more depth in a separate blog post. If you are interested in the TCK and would like to learn more about its development, the appeals process and other related things, check out the TCK reference guide.
What’s new in Bean Validation 2.0?
The focus of Bean Validation 2.0 is supporting and taking advantage of Java SE 8.
For instance type annotations are used to validate the elements of generic containers: List<@NotNull @Email String> emails
.
There are new built-in constraints (@NotBlank
, @NotEmpty
, @Email
, @FutureOrPresent
, @PastOrPresent
, @Positive
, @PositiveOrZero
, @Negative
and @NegativeOrZero
) and all built-in constraints are repeatable annotations now.
Bean Validation 2.0 also supports the new Java 8 date and time types (JSR 310), the property types defined by JavaFX (StringProperty
etc.) as well as java.util.Optional
.
To learn more about all the new features in Bean Validation 2.0, check out this presentation which I recently gave at the jdk.io conference.
What can you do to help?
With the submission of the specification to the JCP for the Final Approval Ballot, the work on Bean Validation 2.0 is done more or less. If you’d like to help, reviewing the specification changes would be the best thing to do at this point. You also could try out the reference implementation Hibernate Validator in your applications and let us know how it works.
Also tell us about ideas and wishes for a future 2.1 release of the spec. We are eager to learn about your requirements, so we can explore any new features in the reference implementation.
To post your feedback, just add a comment below, send a message to our mailing list or post in the Bean Validation forum. If you find a bug or have a specific feature request, please raise it in the issue tracker.
Everything in Bean Validation is open source, so you also can send in actual patches: be it to the API, the spec document, the TCK or the reference implementation. If you are interested, you can find out all the details to get started in the contribution guide.
I’m very happy to announce the CR 2 release of the Bean Validation 2.0 spec!
The CR 2 is an update to the Proposed Final Draft (CR 1), addressing remarks and comments from reviewing all the changes. The updated spec document can be found here. To see the changes applied since the CR 1, check out this colored diff. If you’d like to see all the changes since Bean Validation 1.1, take a look at this diff. The updated API is available on Maven Central, using the GAV coordinates are javax.validation:validation-api:2.0.0.CR2.
What’s new since CR 1?
Given we are in the CR phase, most of the changes of this release naturally fall into the category of bug fixes, wording clarifications, formatting and other similar improvements. Reviewing the work done so far, and also working on the reference implementation and the TCK, we’ve decided to include two improvements to the API, too:
-
ConstraintDescriptor#validateUnwrappedValue()
got renamed intogetValueUnwrapping()
(BVAL-674). The original method name sounded like a "command", whereas the new name makes clear it’s a "query" kind of method; also the members of the returned enum have been adapted to be in sync with the correspondingUnwrapping
payload type names. We’ve also added a methodConstraintDescriptor#unwrap(Class)
, which will let providers expose additional functionality via extension interfaces, e.g. to explore new features which then can be standardized in a future spec revision. -
@ConvertGroup#from()
has a default value ofDefault.class
now (BVAL-689). This simplifies group conversions in the common case where the default group is converted into another group.
Another interesting change is BVAL-613:
when using the reference API JAR with the Java 9 module system, it will have the module name "java.validation" (following the recommendation in the spec appendix).
This is done using the Automatic-Module-Name
manifest header defined by Java 9.
Other changes include JavaDoc improvements and more clearly separating API types from examples in the spec. The complete list of all issues resolved for the CR 2 release can be found in the BVAL JIRA project. Corresponding releases of our reference implementation Hibernate Validator 6 and the TCK are also done today.
What’s new in Bean Validation 2.0?
The focus of Bean Validation 2.0 is supporting and taking advantage of Java SE 8.
For instance type annotations are used to validate the elements of generic containers: List<@NotNull @Email String> emails
.
There are new built-in constraints (@NotBlank
, @NotEmpty
, @Email
, @FutureOrPresent
, @PastOrPresent
, @Positive
, @PositiveOrZero
, @Negative
and @NegativeOrZero
) and all built-in constraints are repeatable annotations now.
Bean Validation 2.0 also supports the new Java 8 date and time types (JSR 310), the property types defined by JavaFX (StringProperty
etc.) as well as java.util.Optional
.
To learn more about all the new features in Bean Validation 2.0, check out this presentation which I recently gave at the jdk.io conference.
What can you do to help?
We’ll hand over the specification to the JCP for the Final Approval Ballot early next week. For the FAB release, we don’t expect any significant changes over today’s CR 2. If you’d like to help, reviewing the specification changes would be the best thing to do at this point. Also it’d be of great help if you tried out the reference implementation in your applications and let us know how it works. Any feedback is welcomed!
To post your feedback, just add a comment below, send a message to our mailing list or post in the Bean Validation forum. If you find a bug or have a specific feature request, please raise it in the issue tracker.
Everything in Bean Validation is open source, so you also can send in actual patches: be it to the API, the spec document, the TCK or the reference implementation. If you are interested, you can find out all the details to get started in the contribution guide.
Latest news
Stay up to date, subscribe to the news feed.