Apache BVal - CHANGES.txt
Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
--------------------------------------------------------------------------------

Content
=======
   * Overview
   * Disclaimer
   * Prerequisites
   * Documentation
   * Getting Involved
   * Release Notes


Overview
========
This is an implementation of the Java Bean Validation (JSRs 303, 349, 380)
specification for Java EE and Java SE.
The technical objective is to provide a class level constraint declaration and
validation facility for the Java application developer, as well as a constraint
metadata repository and query API.


Prerequisites
=============
You need a platform that supports Java SE 8 or later.


Documentation
=============
Please refer to the project page at:
    http://bval.apache.org/


Getting Involved
================
The Apache BVal project is being built by the open source community
for the open source community - we welcome your input and contributions!

What are we looking for?
  * Source code and fixes contributions
  * Documentation assistance
  * Project and feature suggestions
  * Integration and testing with other projects
  * Detailed and constructive feedback
  * Articles and whitepapers

How do I Contribute?
  * To discuss BVal topics, check out the mailing lists.
  * Bugs and other issues can be posted on the project JIRA.


Release Notes - BVal - Version 2.0.0
==========================================

** Bug
    * [BVAL-108] - Prefer Thread context classloader or framework-relative as appropriate to task - addresses resource loading complaints with OSGI
    * [BVAL-154] - avoid storing metamodel for unconstrained types using "negative cache"
    * [BVAL-157] - method named get() blows up with illegal param name
    * [BVAL-158] - ExecutableValidator invokes method if it looks like a getter

** Improvement
    * [BVAL-118] - improve efficiency by associating bean metadata with the factory rather than the context
    * [BVAL-159] - Drop commons dependencies
    * [BVAL-160] - Implement Bean Validation 2.0 (JSR 380)

** Task
    * [BVAL-161] - Redesign bean metadata model
    * [BVAL-162] - Convert remaining JUnit 3 tests to JUnit 4
    * [BVAL-163] - Remove Agimatech extensions
    * [BVAL-164] - Merge core code into jsr module


Release Notes - BVal - Version 1.1.2
==========================================

Bug
-----------

    * [BVAL-105] - Multiple use of @ReportAsSingleViolation composing constraints on one bean leads to internal RuntimeError
    * [BVAL-117] - EMailValidationUtils matches not at circumflex
    * [BVAL-137] - Apache Bean Validation fails on CDI proxies when integrated with Weld CDI 1.2
    * [BVAL-142] - bval-xstream Failed to execute goal org.apache.commons:commons-weaver-maven-plugin
    * [BVAL-147] - TraversableResolver, ConstraintValidatorFactory and MessageInterpolator shouldnt invalidate the metadata cache
    * [BVAL-148] - Incorrect double-checked locking
    * [BVAL-149] - ConstraintViolation contains wrong property
    * [BVAL-150] - improve performance of empty Annotations

Improvement
-----------

    * [BVAL-151] - remove dependency on commons-lang


Release Notes - BVal - Version 1.1.1
==========================================

Bug
-----------

    * [BVAL-144] - wrong encoding for ValidationMessages_es.properties
    * [BVAL-143] - meta cache not shared accross validator instances
    * [BVAL-141] - Wrong method interceptor signature
    * [BVAL-138] - OSGi bundle maven dependencies are too big and also too small
    * [BVAL-136] - fix artifactId of our bundle module


Release Notes - BVal - Version 1.1.0
==========================================

New Feature
-----------

    * [BVAL-122] - Implement Bean Validation 1.1

Task
-----------

    * [BVAL-120] - Add bval-tck11 tck runner for future work on Bean Validation 1.1



Release Notes - BVal - Version 0.5
==================================

Bug
---
    * [BVAL-106] - FeaturesCapable compilation fails on JDK7
    * [BVAL-111] - ValidatorFactory-bound ConstraintValidatorFactory used instead of ValidatorContext-bound instance

Improvement
-----------
    * [BVAL-112] - Reduced log level of ignoreXmlConfiguration message from INFO to CONFIG


Release Notes - BVal - Version 0.4
==================================

Bug
---
    * [BVAL-54] - Handle Java security policies and managers
    * [BVAL-63] - use java.util.ServiceLoader in DefaultValidationProviderResolver#getValidationProviders()
    * [BVAL-89] - Application specific constraints and artifacts not visible by provider in OSGI-based app server
    * [BVAL-90] - Inconsistent fraction handling of @Digits when target is a BigDecimal
    * [BVAL-91] - Security hole in org.apache.bval.util.MethodAccess.get()
    * [BVAL-92] - Security holes in org.apache.bval.util.PrivilegedActions
    * [BVAL-94] - Missing SVN EOL properties
    * [BVAL-95] - Beanvalidation with Generic-DataTypes
    * [BVAL-96] - Use correct encoding for localization messages
    * [BVAL-97] - More than one META-INF/validation.xml in tomcat webapp
    * [BVAL-100] - Java2 Security AccessControlException after moving to use common-lang3
    * [BVAL-104] - german validation messages properties are broken

Improvement
-----------
    * [BVAL-68] - Use FindBugs to reduce coding errors

Task
----
    * [BVAL-99] - upgrade to apache parent pom 10
    * [BVAL-103] - switch BVal from slf4j to java.util.logging


Release Notes for 0.3-incubating
================================

Bug
---
    * [BVAL-84] - CNFEX org.slf4j.impl.StaticLoggerBinder building xstream and guice
    * [BVAL-86] - Missing DecimalMax/DecimalMin constraint messages in ValidationMessages.properties
    * [BVAL-87] - Java 2 security violations in ClassValidator.validate
    * [BVAL-88] - Cascaded validation adds a constraint violation for valid child property

Improvement
-----------
    * [BVAL-60] - Use SLF4J API for logging
    * [BVAL-85] - bval-core has no dependency on slf4j-jcl*


Release Notes for 0.2-incubating
================================

Bug
---
    * [BVAL-47] - Correctly follow GroupSequence definitions when validating
    * [BVAL-70] - Remove @Override annotations from methods implementing interfaces
    * [BVAL-71] - Compile errors with Java SE 5
    * [BVAL-72] - NPE when doing methodvalidation
    * [BVAL-77] - Recent changes made the bval-xstream module required, instead of optional

Improvement
-----------
    * [BVAL-59] - Write or reuse an scm-plugin mojo to capture the svn revision
    * [BVAL-69] - make dependency to com.thoughtworks.xstream of bval-core optional or obsolete
    * [BVAL-73] - Alternative way of addressing code reuse issue between the validators
    * [BVAL-74] - Remove redundant method call from ClassValidator.validateProperty()
    * [BVAL-75] - javadocs, compiler (generics) warnings, etc.
    * [BVAL-76] - Correct spelling error in API:  ConstraintValidationListener.getConstaintViolations()
    * [BVAL-78] - Avoid unsafe casting and object swapping when processing @ReportAsSingleViolation composed constraints
    * [BVAL-79] - email validation can easily work for any CharSequence rather than String only


Release Notes for 0.1-incubating
================================

Sub-task
--------
    * [BVAL-3] - Move all copyrights to NOTICE files
    * [BVAL-4] - Rename java packages
    * [BVAL-5] - Update builds for incubator
    * [BVAL-7] - Setup initial structure/navigation/content in the wiki
    * [BVAL-8] - Setup confluence autoexport template
    * [BVAL-9] - Setup rsync cron job to copy autoexport content over to www staging area

Bug
---
    * [BVAL-11] - After moved java packages tests don't work
    * [BVAL-13] - ConstraintViolationImpl must be Serialziable according to JSR303 spec
    * [BVAL-15] - @Min and @Max fail with very high values of long
    * [BVAL-17] - PathImpl keeps a null-named first node on unindexed property paths
    * [BVAL-18] - DefaultMessageInterpolator substitutes unexistant variables with the whole message
    * [BVAL-19] - Several changes to pass 12 more tests
    * [BVAL-20] - When building a MetaBean, the full tree of subclasses/interfaces must be considered
    * [BVAL-21] - ConstraintViolations set should not have duplicates and should store ElementType and use it in equals()
    * [BVAL-22] - Incorrect output or IOBException when interpolating messages when annotation values have $ or \
    * [BVAL-23] - Circular dependency check produces false positives
    * [BVAL-24] - IllegalArgumentException should be thrown when calling Validator.getConstraintsForClass() with a null class
    * [BVAL-26] - IllegalAccessException is thrown when accesing annotation values
    * [BVAL-27] - IllegalArgumentException should be thrown when calling BeanDescriptor.getConstraintsForProperty(null)
    * [BVAL-28] - Property path for nodes inside iterables that do not implement List should not contain the index
    * [BVAL-29] - Defer node creation in implementation of ConstraintViolationBuilder API
    * [BVAL-30] - Groups from the main constraint annotation must be inherited by the composing annotations
    * [BVAL-31] - A ConstraintDefinitionException should be thrown when the resolved validator is not compatible with the annotation type
    * [BVAL-32] - Annotations associated with composited contraints must reflect inherited groups
    * [BVAL-33] - Payload value must also be inherited in compositing constraints
    * [BVAL-34] - Parameter for @Pattern message should be {regexp}
    * [BVAL-35] - Improved support of @OverridesAttribute
    * [BVAL-36] - Improve @ReportAsSingleValidation implementation
    * [BVAL-37] - Ensure constraint definitions are valid
    * [BVAL-38] - Groups and payload values must be part of the ConstraintDescriptor attributes
    * [BVAL-39] - Implicit groups should be correctly set in constraint descriptors
    * [BVAL-41] - Package bval artifacts as bundles
    * [BVAL-42] - Stop group sequence validation when at least 1 violation is already reported
    * [BVAL-43] - GroupDefinitionException must be thrown on cyclic group detection
    * [BVAL-45] - ValidationException must be thrown when validating a bean with an annotated method which isn't a valid getter
    * [BVAL-48] - jUnit failure during build on Windows - trunk rev 945800
    * [BVAL-49] - ValidationException must be thrown in case ConstraintValidatorFactory returns null for a valid getInstance call
    * [BVAL-50] - Fix TraversableResolver usage
    * [BVAL-51] - Several fixes in ElementDescriptor and subinterfaces impls
    * [BVAL-53] - Several fixes for XML metadata processing impl
    * [BVAL-55] - Fix remaining TCK tests
    * [BVAL-58] - Clean up build before release
    * [BVAL-62] - add missing ASL headers
    * [BVAL-64] - org.apache.bval.bundle needs a custom NOTICE file
    * [BVAL-65] - Incubator required DISCLAIMER missing from jars
    * [BVAL-67] - Resolve NOTICE file issues fond during RC2 vote

Improvement
-----------
    * [BVAL-12] - Current implementation of method validation (appendix C of JSR-303) doesn't work with some constraints
    * [BVAL-16] - Maven project to launch TCK suite
    * [BVAL-44] - Move optional JSON code out of bval-core to a bval-json module
    * [BVAL-46] - Create project source assembly
    * [BVAL-52] - ValidationParser.getInputStream() should call getResourceAsStream() for TCK suite to work
    * [BVAL-57] - Create a single apache-bval jar/bundle
    * [BVAL-66] - Method validation parameter processing problems

New Feature
-----------
    * [BVAL-40] - Provide a way to display the BVal version being used
    * [BVAL-56] - make bval work with geronimo spec osgi service locator

Task
----
    * [BVAL-2] - Initial codebase donation tasks
    * [BVAL-6] - Setup project website

Test
----
    * [BVAL-10] - Setup continuous builds

--------------------------------------------------------------------------------

