GERONIMO-6581 Bean Validation 2.0 API
Based on patch from mbenson
git-svn-id: https://svn.apache.org/repos/asf/geronimo/specs/trunk@1807299 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/geronimo-validation_2.0_spec/NOTICE b/geronimo-validation_2.0_spec/NOTICE
index edde817..53b0f1c 100644
--- a/geronimo-validation_2.0_spec/NOTICE
+++ b/geronimo-validation_2.0_spec/NOTICE
@@ -1,5 +1,5 @@
-Apache Geronimo JSR-349 Bean Validation Spec API
-Copyright 2009-2016 The Apache Software Foundation
+Apache Geronimo JSR-380 Bean Validation Spec API
+Copyright 2009-2017 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
diff --git a/geronimo-validation_2.0_spec/pom.xml b/geronimo-validation_2.0_spec/pom.xml
index 06ee99f..775d0c0 100644
--- a/geronimo-validation_2.0_spec/pom.xml
+++ b/geronimo-validation_2.0_spec/pom.xml
@@ -20,22 +20,23 @@
<!-- $Rev: 759182 $ $Date: 2009-03-27 11:48:31 -0400 (Fri, 27 Mar 2009) $ -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.geronimo.genesis</groupId>
- <artifactId>genesis-java6-flava</artifactId>
- <version>2.2</version>
+ <artifactId>genesis-java8-flava</artifactId>
+ <version>2.3</version>
</parent>
<groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-validation_1.1_spec</artifactId>
- <version>1.1-SNAPSHOT</version>
+ <artifactId>geronimo-validation_2.0_spec</artifactId>
+ <version>1.0-SNAPSHOT</version>
<packaging>bundle</packaging>
- <name>Apache Geronimo Bean Validation Spec 1.1</name>
- <description>Apache Geronimo implementation of the JSR-349 Bean Validation Spec API</description>
+ <name>Apache Geronimo Bean Validation Spec 2.0</name>
+ <description>Apache Geronimo implementation of the JSR-380 Bean Validation Spec API</description>
<url>http://geronimo.apache.org/maven/${siteId}/${project.version}</url>
<distributionManagement>
@@ -50,8 +51,11 @@
</properties>
<scm>
- <connection>scm:svn:http://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-validation_1.1_spec/</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-validation_1.1_spec/</developerConnection>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-validation_1.1_spec/
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-validation_1.1_spec/
+ </developerConnection>
<url>http://svn.apache.org/viewcvs.cgi/geronimo/specs/trunk/geronimo-validation_1.1_spec/</url>
</scm>
@@ -80,7 +84,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
- <version>1.7</version>
<executions>
<execution>
<id>delete-DEPENDENCIES</id>
@@ -90,7 +93,7 @@
</goals>
<configuration>
<target>
- <delete dir="${project.build.directory}" includes="**/DEPENDENCIES" />
+ <delete dir="${project.build.directory}" includes="**/DEPENDENCIES"/>
</target>
</configuration>
</execution>
@@ -99,17 +102,18 @@
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
- <version>2.0.1</version>
<configuration>
<instructions>
- <Bundle-SymbolicName>${project.groupId}.${project.artifactId};singleton=true</Bundle-SymbolicName>
- <Specification-Title>JSR-349 Bean Validation API</Specification-Title>
+ <Bundle-SymbolicName>${project.groupId}.${project.artifactId};singleton=true
+ </Bundle-SymbolicName>
+ <Specification-Title>JSR-380 Bean Validation API</Specification-Title>
<Specification-Vendor>Sun Microsystems, Inc.</Specification-Vendor>
- <Specification-Version>1.1</Specification-Version>
- <Export-Package>javax.validation*;version=1.1</Export-Package>
+ <Specification-Version>2.0</Specification-Version>
+ <Export-Package>javax.validation*;version=2.0</Export-Package>
<Import-Package>org.apache.geronimo.osgi.registry.api;resolution:=optional,*</Import-Package>
<Private-Package>org.apache.geronimo.osgi.locator</Private-Package>
<Bundle-Activator>org.apache.geronimo.osgi.locator.Activator</Bundle-Activator>
+ <Automatic-Module-Name>java.validation</Automatic-Module-Name>
</instructions>
</configuration>
</plugin>
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/BootstrapConfiguration.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/BootstrapConfiguration.java
index 7e057a4..94142e9 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/BootstrapConfiguration.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/BootstrapConfiguration.java
@@ -31,4 +31,10 @@
boolean isExecutableValidationEnabled();
Set<ExecutableType> getDefaultValidatedExecutableTypes();
Map<String, String> getProperties();
+
+ /** @since 2.0 */
+ String getClockProviderClassName();
+
+ /** @since 2.0 */
+ Set<String> getValueExtractorClassNames();
}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ClockProvider.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ClockProvider.java
new file mode 100644
index 0000000..830d8a3
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ClockProvider.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation;
+
+import java.time.Clock;
+
+/**
+ * @since 2.0
+ */
+public interface ClockProvider {
+
+ Clock getClock();
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Configuration.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Configuration.java
index 74b639d..def3fd1 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Configuration.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Configuration.java
@@ -18,6 +18,8 @@
import java.io.InputStream;
+import javax.validation.valueextraction.ValueExtractor;
+
/**
* @version $Rev$ $Date$
*/
@@ -43,11 +45,21 @@
ValidatorFactory buildValidatorFactory();
- // @since 1.1
-
+ /** @since 1.1 */
T parameterNameProvider(ParameterNameProvider parameterNameProvider);
+
+ /** @since 1.1 */
ParameterNameProvider getDefaultParameterNameProvider();
+ /** @since 1.1 */
BootstrapConfiguration getBootstrapConfiguration();
-}
+ /** @since 2.0 */
+ T clockProvider(ClockProvider clockProvider);
+
+ /** @since 2.0 */
+ T addValueExtractor(ValueExtractor<?> extractor);
+
+ /** @since 2.0 */
+ ClockProvider getDefaultClockProvider();
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Constraint.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Constraint.java
index 3225023..c694d5b 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Constraint.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Constraint.java
@@ -50,4 +50,3 @@
*/
Class<? extends ConstraintValidator<?,?>>[] validatedBy();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDeclarationException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDeclarationException.java
index 9a7cddf..d7cb21c 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDeclarationException.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDeclarationException.java
@@ -19,7 +19,9 @@
/**
* @version $Rev$ $Date$
*/
+@SuppressWarnings("serial")
public class ConstraintDeclarationException extends ValidationException {
+
public ConstraintDeclarationException(String message) {
super(message);
}
@@ -36,4 +38,3 @@
super(cause);
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDefinitionException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDefinitionException.java
index a98a689..f9b9d12 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDefinitionException.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintDefinitionException.java
@@ -19,7 +19,9 @@
/**
* @version $Rev$ $Date$
*/
+@SuppressWarnings("serial")
public class ConstraintDefinitionException extends ValidationException {
+
public ConstraintDefinitionException(String message) {
super(message);
}
@@ -36,4 +38,3 @@
super(cause);
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidator.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidator.java
index 799cb76..98be78f 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidator.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidator.java
@@ -22,8 +22,8 @@
* @version $Rev$ $Date$
*/
public interface ConstraintValidator<A extends Annotation, T> {
- void initialize(A constraintAnnotation);
+ default void initialize(A constraintAnnotation) {
+ }
boolean isValid(T value, ConstraintValidatorContext context);
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorContext.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorContext.java
index 7ec6c00..da61bbc 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorContext.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorContext.java
@@ -26,29 +26,57 @@
ConstraintViolationBuilder buildConstraintViolationWithTemplate(String messageTemplate);
+ /** @since 2.0 */
+ ClockProvider getClockProvider();
+
/** @since 1.1 */
<T> T unwrap(Class<T> type);
interface ConstraintViolationBuilder {
+ /**
+ * @deprecated since 1.1
+ * @see #addBeanNode()
+ * @see #addPropertyNode(String)
+ * @see #addParameterNode(int)
+ */
+ @Deprecated
NodeBuilderDefinedContext addNode(String name);
ConstraintValidatorContext addConstraintViolation();
- // @since 1.1
-
+ /** @since 1.1 */
NodeBuilderCustomizableContext addPropertyNode(String name);
+
+ /** @since 1.1 */
LeafNodeBuilderCustomizableContext addBeanNode();
+
+ /** @since 1.1 */
NodeBuilderDefinedContext addParameterNode(int index);
+ /** @since 2.0 */
+ ContainerElementNodeBuilderCustomizableContext addContainerElementNode(String name, Class<?> containerType,
+ Integer typeArgumentIndex);
+
interface NodeBuilderDefinedContext {
+ /**
+ * @deprecated since 1.1
+ * @see #addPropertyNode(String)
+ * @see #addBeanNode()
+ */
+ @Deprecated
NodeBuilderCustomizableContext addNode(String name);
ConstraintValidatorContext addConstraintViolation();
- // @since 1.1
-
+ /** @since 1.1 */
NodeBuilderCustomizableContext addPropertyNode(String name);
+
+ /** @since 1.1 */
LeafNodeBuilderCustomizableContext addBeanNode();
+
+ /** @since 2.0 */
+ ContainerElementNodeBuilderCustomizableContext addContainerElementNode(String name, Class<?> containerType,
+ Integer typeArgumentIndex);
}
interface NodeBuilderCustomizableContext {
@@ -59,10 +87,18 @@
ConstraintValidatorContext addConstraintViolation();
- // @since 1.1
-
+ /** @since 1.1 */
NodeBuilderCustomizableContext addPropertyNode(String name);
+
+ /** @since 1.1 */
LeafNodeBuilderCustomizableContext addBeanNode();
+
+ /** @since 2.0 */
+ NodeBuilderCustomizableContext inContainer(Class<?> containerClass, Integer typeArgumentIndex);
+
+ /** @since 2.0 */
+ ContainerElementNodeBuilderCustomizableContext addContainerElementNode(String name, Class<?> containerType,
+ Integer typeArgumentIndex);
}
interface NodeContextBuilder {
@@ -75,10 +111,15 @@
ConstraintValidatorContext addConstraintViolation();
- // @since 1.1
-
+ /** @since 1.1 */
NodeBuilderCustomizableContext addPropertyNode(String name);
+
+ /** @since 1.1 */
LeafNodeBuilderCustomizableContext addBeanNode();
+
+ /** @since 2.0 */
+ ContainerElementNodeBuilderCustomizableContext addContainerElementNode(String name, Class<?> containerType,
+ Integer typeArgumentIndex);
}
/** @since 1.1 */
@@ -90,6 +131,9 @@
interface LeafNodeBuilderCustomizableContext {
LeafNodeContextBuilder inIterable();
ConstraintValidatorContext addConstraintViolation();
+
+ /** @since 2.0 */
+ LeafNodeBuilderCustomizableContext inContainer(Class<?> containerClass, Integer typeArgumentIndex);
}
/** @since 1.1 */
@@ -98,6 +142,35 @@
LeafNodeBuilderDefinedContext atIndex(Integer index);
ConstraintValidatorContext addConstraintViolation();
}
+
+ /** @since 2.0 */
+ interface ContainerElementNodeBuilderDefinedContext {
+ NodeBuilderCustomizableContext addPropertyNode(String name);
+ LeafNodeBuilderCustomizableContext addBeanNode();
+ ContainerElementNodeBuilderCustomizableContext addContainerElementNode(String name, Class<?> containerType,
+ Integer typeArgumentIndex);
+ ConstraintValidatorContext addConstraintViolation();
+ }
+
+ /** @since 2.0 */
+ interface ContainerElementNodeBuilderCustomizableContext {
+ ContainerElementNodeContextBuilder inIterable();
+ NodeBuilderCustomizableContext addPropertyNode(String name);
+ LeafNodeBuilderCustomizableContext addBeanNode();
+ ContainerElementNodeBuilderCustomizableContext addContainerElementNode(String name, Class<?> containerType,
+ Integer typeArgumentIndex);
+ ConstraintValidatorContext addConstraintViolation();
+ }
+
+ /** @since 2.0 */
+ interface ContainerElementNodeContextBuilder {
+ ContainerElementNodeBuilderDefinedContext atKey(Object key);
+ ContainerElementNodeBuilderDefinedContext atIndex(Integer index);
+ NodeBuilderCustomizableContext addPropertyNode(String name);
+ LeafNodeBuilderCustomizableContext addBeanNode();
+ ContainerElementNodeBuilderCustomizableContext addContainerElementNode(String name, Class<?> containerType,
+ Integer typeArgumentIndex);
+ ConstraintValidatorContext addConstraintViolation();
+ }
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorFactory.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorFactory.java
index 48a4c02..29e839d 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorFactory.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintValidatorFactory.java
@@ -26,4 +26,3 @@
/** @since 1.1 */
void releaseInstance(ConstraintValidator<?, ?> instance);
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolation.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolation.java
index 4105a19..d356e46 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolation.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolation.java
@@ -45,4 +45,3 @@
Object getExecutableReturnValue();
<U> U unwrap(Class<U> type);
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolationException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolationException.java
index 1588980..c2741a8 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolationException.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ConstraintViolationException.java
@@ -22,7 +22,9 @@
/**
* @version $Rev$ $Date$
*/
+@SuppressWarnings("serial")
public class ConstraintViolationException extends ValidationException {
+
private final Set<ConstraintViolation<?>> constraintViolations;
public ConstraintViolationException(String message,
@@ -39,4 +41,3 @@
return constraintViolations;
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ElementKind.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ElementKind.java
index ea21c9b..a1241fd 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ElementKind.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ElementKind.java
@@ -18,5 +18,7 @@
/** @since 1.1 */
public enum ElementKind {
- BEAN, PROPERTY, METHOD, CONSTRUCTOR, PARAMETER, CROSS_PARAMETER, RETURN_VALUE
+ BEAN, PROPERTY, METHOD, CONSTRUCTOR, PARAMETER, CROSS_PARAMETER, RETURN_VALUE,
+ /** @since 2.0 */
+ CONTAINER_ELEMENT;
}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupDefinitionException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupDefinitionException.java
index 0f2553d..a0c5f93 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupDefinitionException.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupDefinitionException.java
@@ -19,7 +19,9 @@
/**
* @version $Rev$ $Date$
*/
+@SuppressWarnings("serial")
public class GroupDefinitionException extends ValidationException {
+
public GroupDefinitionException(String message) {
super(message);
}
@@ -36,4 +38,3 @@
super(cause);
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupSequence.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupSequence.java
index 3b8f06b..1c82a8a 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupSequence.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/GroupSequence.java
@@ -22,12 +22,14 @@
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Documented;
+
/**
* @version $Rev$ $Date$
*/
@Target({ TYPE })
@Retention(RUNTIME)
+@Documented
public @interface GroupSequence {
Class<?>[] value();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/MessageInterpolator.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/MessageInterpolator.java
index d4a6d33..2ad2b32 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/MessageInterpolator.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/MessageInterpolator.java
@@ -36,4 +36,3 @@
<T> T unwrap(Class<T> type);
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/NoProviderFoundException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/NoProviderFoundException.java
new file mode 100644
index 0000000..ffac061
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/NoProviderFoundException.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation;
+
+/**
+ * @since 2.0
+ */
+@SuppressWarnings("serial")
+public class NoProviderFoundException extends ValidationException {
+
+ public NoProviderFoundException(String message) {
+ super(message);
+ }
+
+ public NoProviderFoundException() {
+ super();
+ }
+
+ public NoProviderFoundException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public NoProviderFoundException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/OverridesAttribute.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/OverridesAttribute.java
index 9fd5f56..35a6d06 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/OverridesAttribute.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/OverridesAttribute.java
@@ -18,6 +18,7 @@
import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -29,10 +30,12 @@
*/
@Retention(RUNTIME)
@Target({ METHOD })
+@Documented
+@Repeatable(OverridesAttribute.List.class)
public @interface OverridesAttribute {
Class<? extends Annotation> constraint();
- String name();
+ String name() default "";
int constraintIndex() default -1;
@@ -43,4 +46,3 @@
OverridesAttribute[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Path.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Path.java
index 6c2b55a..adce7db 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Path.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Path.java
@@ -23,6 +23,10 @@
*/
public interface Path extends Iterable<Path.Node> {
+ /** @since 2.0 */
+ @Override
+ String toString();
+
interface Node {
String getName();
@@ -32,37 +36,65 @@
Object getKey();
- // @since 1.1
-
+ /** @since 1.1 */
ElementKind getKind();
+ /** @since 1.1 */
<T extends Node> T as(Class<T> nodeType);
+
+ /** @since 2.0 */
+ @Override
+ String toString();
}
- // @since 1.1
-
+ /** @since 1.1 */
interface MethodNode extends Node {
List<Class<?>> getParameterTypes();
}
+ /** @since 1.1 */
interface ConstructorNode extends Node {
List<Class<?>> getParameterTypes();
}
+ /** @since 1.1 */
interface ReturnValueNode extends Node {
}
+ /** @since 1.1 */
interface ParameterNode extends Node {
int getParameterIndex();
}
+ /** @since 1.1 */
interface CrossParameterNode extends Node {
}
+ /** @since 1.1 */
interface BeanNode extends Node {
+
+ /** @since 2.0 */
+ Class<?> getContainerClass();
+
+ /** @since 2.0 */
+ Integer getTypeArgumentIndex();
}
+ /** @since 1.1 */
interface PropertyNode extends Node {
+
+ /** @since 2.0 */
+ Class<?> getContainerClass();
+
+ /** @since 2.0 */
+ Integer getTypeArgumentIndex();
+ }
+
+ /** @since 2.0 */
+ interface ContainerElementNode extends Node {
+
+ Class<?> getContainerClass();
+
+ Integer getTypeArgumentIndex();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Payload.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Payload.java
index 1917db4..7846500 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Payload.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Payload.java
@@ -26,4 +26,3 @@
*/
public interface Payload {
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ReportAsSingleViolation.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ReportAsSingleViolation.java
index b8d407a..e357676 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ReportAsSingleViolation.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ReportAsSingleViolation.java
@@ -22,11 +22,13 @@
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Documented;
+
/**
* @version $Rev$ $Date$
*/
@Target({ ANNOTATION_TYPE })
@Retention(RUNTIME)
+@Documented
public @interface ReportAsSingleViolation {
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/TraversableResolver.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/TraversableResolver.java
index 7e6beb5..42ead4b 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/TraversableResolver.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/TraversableResolver.java
@@ -34,4 +34,3 @@
Path pathToTraversableObject,
ElementType elementType);
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/UnexpectedTypeException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/UnexpectedTypeException.java
index 6c97ac5..04a7b80 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/UnexpectedTypeException.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/UnexpectedTypeException.java
@@ -21,7 +21,9 @@
*
* @version $Rev$ $Date$
*/
+@SuppressWarnings("serial")
public class UnexpectedTypeException extends ConstraintDeclarationException {
+
public UnexpectedTypeException(String message) {
super(message);
}
@@ -38,4 +40,3 @@
super(cause);
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Valid.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Valid.java
index 1fa9f92..4100c7c 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Valid.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Valid.java
@@ -23,13 +23,13 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface Valid {
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java
index 7fde8b8..a73bea6 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validation.java
@@ -47,7 +47,7 @@
public static <T extends Configuration<T>, U extends ValidationProvider<T>>
ProviderSpecificBootstrap<T> byProvider(Class<U> providerType) {
- return new ProviderSpecificBootstrapImpl<T, U>(providerType);
+ return new ProviderSpecificBootstrapImpl<>(providerType);
}
/*
@@ -87,15 +87,17 @@
* @see javax.validation.bootstrap.ProviderSpecificBootstrap#configure()
*/
public T configure() {
- if (providerClass == null)
+ if (providerClass == null) {
throw new ValidationException("No resolver provided");
+ }
// create a default resolver if not supplied by providerResolver()
GenericBootstrapImpl impl = new GenericBootstrapImpl();
- if ( vpResolver == null )
+ if ( vpResolver == null ) {
vpResolver = impl.getDefaultValidationProviderResolver();
- else
+ } else {
impl.providerResolver(vpResolver);
+ }
// check each provider discovered by the resolver
for (ValidationProvider<?> vProvider : vpResolver.getValidationProviders()) {
@@ -146,8 +148,9 @@
* @see javax.validation.spi.BootstrapState#getDefaultValidationProviderResolver()
*/
public ValidationProviderResolver getDefaultValidationProviderResolver() {
- if (vpDefaultResolver == null)
+ if (vpDefaultResolver == null) {
vpDefaultResolver = new DefaultValidationProviderResolver();
+ }
return vpDefaultResolver;
}
@@ -159,8 +162,9 @@
public Configuration<?> configure() {
ValidationProviderResolver resolv = vpResolver;
try {
- if (resolv == null)
+ if (resolv == null) {
resolv = getDefaultValidationProviderResolver();
+ }
return resolv.getValidationProviders().get(0).createGenericConfiguration(this);
} catch (Exception e) {
throw new ValidationException("Could not create Configuration.", e);
@@ -175,8 +179,7 @@
*/
private static class DefaultValidationProviderResolver implements ValidationProviderResolver {
// cache of providers per class loader
- private volatile WeakHashMap<ClassLoader, List<ValidationProvider<?>>> providerCache =
- new WeakHashMap<ClassLoader, List<ValidationProvider<?>>>();
+ private volatile WeakHashMap<ClassLoader, List<ValidationProvider<?>>> providerCache = new WeakHashMap<>();
/*
* (non-Javadoc)
@@ -188,14 +191,15 @@
// get our class loader
ClassLoader cl = PrivClassLoader.get(null);
- if (cl == null)
+ if (cl == null) {
cl = PrivClassLoader.get(DefaultValidationProviderResolver.class);
+ }
// use any previously cached providers
providers = providerCache.get(cl);
if (providers == null) {
// need to discover and load them for this class loader
- providers = new ArrayList<ValidationProvider<?>>();
+ providers = new ArrayList<>();
try {
List<Object> serviceProviders = ProviderLocator.getServices(ValidationProvider.class.getName(), this.getClass(), cl);
for (Object provider : serviceProviders) {
@@ -227,10 +231,10 @@
public static ClassLoader get(Class<?> c) {
final PrivClassLoader action = new PrivClassLoader(c);
- if (System.getSecurityManager() != null)
- return AccessController.doPrivileged(action);
- else
+ if (System.getSecurityManager() == null) {
return action.run();
+ }
+ return AccessController.doPrivileged(action);
}
private PrivClassLoader(Class<?> c) {
@@ -238,12 +242,11 @@
}
public ClassLoader run() {
- if (c != null)
- return c.getClassLoader();
- else
+ if (c == null) {
return Thread.currentThread().getContextClassLoader();
+ }
+ return c.getClassLoader();
}
}
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationException.java
index d123e7a..ec6f71f 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationException.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationException.java
@@ -19,7 +19,9 @@
/**
* @version $Rev$ $Date$
*/
+@SuppressWarnings("serial")
public class ValidationException extends RuntimeException {
+
public ValidationException(String message) {
super(message);
}
@@ -36,4 +38,3 @@
super(cause);
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationProviderResolver.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationProviderResolver.java
index 618f729..794b482 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationProviderResolver.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidationProviderResolver.java
@@ -25,4 +25,3 @@
public interface ValidationProviderResolver {
List<ValidationProvider<?>> getValidationProviders();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validator.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validator.java
index bff321c..56fab4f 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validator.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/Validator.java
@@ -42,4 +42,3 @@
/** @since 1.1 */
ExecutableValidator forExecutables();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorContext.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorContext.java
index ead288e..3ffc2fd 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorContext.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorContext.java
@@ -16,6 +16,8 @@
*/
package javax.validation;
+import javax.validation.valueextraction.ValueExtractor;
+
/**
* @version $Rev$ $Date$
*/
@@ -30,5 +32,10 @@
/** @since 1.1 */
ValidatorContext parameterNameProvider(ParameterNameProvider parameterNameProvider);
-}
+ /** @since 2.0 */
+ ValidatorContext clockProvider(ClockProvider clockProvider);
+
+ /** @since 2.0 */
+ ValidatorContext addValueExtractor(ValueExtractor<?> extractor);
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorFactory.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorFactory.java
index fb02a46..7674f14 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorFactory.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/ValidatorFactory.java
@@ -19,7 +19,7 @@
/**
* @version $Rev$ $Date$
*/
-public interface ValidatorFactory {
+public interface ValidatorFactory extends AutoCloseable {
Validator getValidator();
ValidatorContext usingContext();
@@ -35,6 +35,10 @@
/** @since 1.1 */
ParameterNameProvider getParameterNameProvider();
+ /** @since 1.1 */
+ @Override
void close();
-}
+ /** @since 2.0 */
+ ClockProvider getClockProvider();
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/GenericBootstrap.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/GenericBootstrap.java
index 07eaa58..09e35e2 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/GenericBootstrap.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/GenericBootstrap.java
@@ -27,4 +27,3 @@
Configuration<?> configure();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java
index eb87882..4b32922 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/bootstrap/ProviderSpecificBootstrap.java
@@ -25,4 +25,3 @@
T configure();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertFalse.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertFalse.java
index e01d69b..db9cc38 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertFalse.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertFalse.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -35,10 +37,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(AssertFalse.List.class)
public @interface AssertFalse {
String message() default "{javax.validation.constraints.AssertFalse.message}";
@@ -46,11 +49,10 @@
Class<? extends Payload>[] payload() default {};
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
AssertFalse[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertTrue.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertTrue.java
index b880d05..08dc1bd 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertTrue.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/AssertTrue.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -35,10 +37,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(AssertTrue.List.class)
public @interface AssertTrue {
String message() default "{javax.validation.constraints.AssertTrue.message}";
@@ -46,11 +49,10 @@
Class<? extends Payload>[] payload() default {};
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
AssertTrue[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMax.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMax.java
index 6ebc01b..ce59872 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMax.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMax.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -40,10 +42,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(DecimalMax.List.class)
public @interface DecimalMax {
String message() default "{javax.validation.constraints.DecimalMax.message}";
@@ -56,11 +59,10 @@
/** @since 1.1 */
boolean inclusive() default true;
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
DecimalMax[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMin.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMin.java
index a59ed2f..4c5c017 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMin.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/DecimalMin.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -40,10 +42,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(DecimalMin.List.class)
public @interface DecimalMin {
String message() default "{javax.validation.constraints.DecimalMin.message}";
@@ -56,11 +59,10 @@
/** @since 1.1 */
boolean inclusive() default true;
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
DecimalMin[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Digits.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Digits.java
index ef90287..80a0311 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Digits.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Digits.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -46,10 +48,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Digits.List.class)
public @interface Digits {
String message() default "{javax.validation.constraints.Digits.message}";
@@ -67,11 +70,10 @@
*/
int fraction();
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Digits[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Email.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Email.java
new file mode 100644
index 0000000..0912649
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Email.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(Email.List.class)
+public @interface Email {
+ String message() default "{javax.validation.constraints.Email.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ String regexp() default ".*";
+
+ Pattern.Flag[] flags() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ Email[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Future.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Future.java
index c25ba6d..1c6c0f1 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Future.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Future.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,20 +28,44 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
+ * <p>
* Verify that the annotated value of the annotated element is in the future or {@code null}.
- * Supported types are {@link java.util.Calendar} and {@link java.util.Date}
+ * </p>
+ * <p>
+ * Supports:
+ * <ul>
+ * <li>{@code java.util.Date}</li>
+ * <li>{@code java.util.Calendar}</li>
+ * <li>{@code java.time.Instant}</li>
+ * <li>{@code java.time.LocalDate}</li>
+ * <li>{@code java.time.LocalDateTime}</li>
+ * <li>{@code java.time.LocalTime}</li>
+ * <li>{@code java.time.MonthDay}</li>
+ * <li>{@code java.time.OffsetDateTime}</li>
+ * <li>{@code java.time.OffsetTime}</li>
+ * <li>{@code java.time.Year}</li>
+ * <li>{@code java.time.YearMonth}</li>
+ * <li>{@code java.time.ZonedDateTime}</li>
+ * <li>{@code java.time.chrono.HijrahDate}</li>
+ * <li>{@code java.time.chrono.JapaneseDate}</li>
+ * <li>{@code java.time.chrono.MinguoDate}</li>
+ * <li>{@code java.time.chrono.ThaiBuddhistDate}</li>
+ * </ul>
+ * </p>
*
* Other types might be supported in a non-portable manner.
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Future.List.class)
public @interface Future {
String message() default "{javax.validation.constraints.Future.message}";
@@ -48,11 +73,10 @@
Class<? extends Payload>[] payload() default {};
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Future[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/FutureOrPresent.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/FutureOrPresent.java
new file mode 100644
index 0000000..50dbf65
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/FutureOrPresent.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * <p>
+ * Verify that the value of the annotated element is in the future, present or {@code null}.
+ * </p>
+ * <p>
+ * Supports:
+ * <ul>
+ * <li>{@code java.util.Date}</li>
+ * <li>{@code java.util.Calendar}</li>
+ * <li>{@code java.time.Instant}</li>
+ * <li>{@code java.time.LocalDate}</li>
+ * <li>{@code java.time.LocalDateTime}</li>
+ * <li>{@code java.time.LocalTime}</li>
+ * <li>{@code java.time.MonthDay}</li>
+ * <li>{@code java.time.OffsetDateTime}</li>
+ * <li>{@code java.time.OffsetTime}</li>
+ * <li>{@code java.time.Year}</li>
+ * <li>{@code java.time.YearMonth}</li>
+ * <li>{@code java.time.ZonedDateTime}</li>
+ * <li>{@code java.time.chrono.HijrahDate}</li>
+ * <li>{@code java.time.chrono.JapaneseDate}</li>
+ * <li>{@code java.time.chrono.MinguoDate}</li>
+ * <li>{@code java.time.chrono.ThaiBuddhistDate}</li>
+ * </ul>
+ * </p>
+ *
+ * Other types might be supported in a non-portable manner.
+ *
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(FutureOrPresent.List.class)
+public @interface FutureOrPresent {
+ String message() default "{javax.validation.constraints.FutureOrPresent.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ FutureOrPresent[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Max.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Max.java
index f94688f..f8afcaf 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Max.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Max.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -40,10 +42,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Max.List.class)
public @interface Max {
String message() default "{javax.validation.constraints.Max.message}";
@@ -53,11 +56,10 @@
long value();
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Max[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Min.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Min.java
index c933b51..262a06b 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Min.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Min.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -40,10 +42,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Min.List.class)
public @interface Min {
String message() default "{javax.validation.constraints.Min.message}";
@@ -53,11 +56,10 @@
long value();
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Min[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Negative.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Negative.java
new file mode 100644
index 0000000..57337b7
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Negative.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(Negative.List.class)
+public @interface Negative {
+ String message() default "{javax.validation.constraints.Negative.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ Negative[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NegativeOrZero.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NegativeOrZero.java
new file mode 100644
index 0000000..3489780
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NegativeOrZero.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(NegativeOrZero.List.class)
+public @interface NegativeOrZero {
+ String message() default "{javax.validation.constraints.NegativeOrZero.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ NegativeOrZero[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotBlank.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotBlank.java
new file mode 100644
index 0000000..1a6f15c
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotBlank.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(NotBlank.List.class)
+public @interface NotBlank {
+ String message() default "{javax.validation.constraints.NotBlank.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ NotBlank[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotEmpty.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotEmpty.java
new file mode 100644
index 0000000..ea1c4ac
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotEmpty.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(NotEmpty.List.class)
+public @interface NotEmpty {
+ String message() default "{javax.validation.constraints.NotEmpty.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ NotEmpty[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotNull.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotNull.java
index 5e9e101..71b45cf 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotNull.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/NotNull.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -34,10 +36,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(NotNull.List.class)
public @interface NotNull {
String message() default "{javax.validation.constraints.NotNull.message}";
@@ -45,11 +48,10 @@
Class<? extends Payload>[] payload() default {};
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
NotNull[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Null.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Null.java
index f6c792b..0e4b32e 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Null.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Null.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -34,10 +36,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Null.List.class)
public @interface Null {
String message() default "{javax.validation.constraints.Null.message}";
@@ -45,11 +48,10 @@
Class<? extends Payload>[] payload() default {};
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Null[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Past.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Past.java
index 85824f3..2444082 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Past.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Past.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,20 +28,44 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
+ * <p>
* Verify that the annotated value of the annotated element is in the past or {@code null}.
- * Supported types are {@link java.util.Calendar} and {@link java.util.Date}
+ * </p>
+ * <p>
+ * Supports:
+ * <ul>
+ * <li>{@code java.util.Date}</li>
+ * <li>{@code java.util.Calendar}</li>
+ * <li>{@code java.time.Instant}</li>
+ * <li>{@code java.time.LocalDate}</li>
+ * <li>{@code java.time.LocalDateTime}</li>
+ * <li>{@code java.time.LocalTime}</li>
+ * <li>{@code java.time.MonthDay}</li>
+ * <li>{@code java.time.OffsetDateTime}</li>
+ * <li>{@code java.time.OffsetTime}</li>
+ * <li>{@code java.time.Year}</li>
+ * <li>{@code java.time.YearMonth}</li>
+ * <li>{@code java.time.ZonedDateTime}</li>
+ * <li>{@code java.time.chrono.HijrahDate}</li>
+ * <li>{@code java.time.chrono.JapaneseDate}</li>
+ * <li>{@code java.time.chrono.MinguoDate}</li>
+ * <li>{@code java.time.chrono.ThaiBuddhistDate}</li>
+ * </ul>
+ * </p>
*
* Other types might be supported in a non-portable manner.
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Past.List.class)
public @interface Past {
String message() default "{javax.validation.constraints.Past.message}";
@@ -48,11 +73,10 @@
Class<? extends Payload>[] payload() default {};
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Past[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/PastOrPresent.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/PastOrPresent.java
new file mode 100644
index 0000000..501e2f9
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/PastOrPresent.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * <p>
+ * Verify that the value of the annotated element is in the past, present or {@code null}.
+ * </p>
+ * <p>
+ * Supports:
+ * <ul>
+ * <li>{@code java.util.Date}</li>
+ * <li>{@code java.util.Calendar}</li>
+ * <li>{@code java.time.Instant}</li>
+ * <li>{@code java.time.LocalDate}</li>
+ * <li>{@code java.time.LocalDateTime}</li>
+ * <li>{@code java.time.LocalTime}</li>
+ * <li>{@code java.time.MonthDay}</li>
+ * <li>{@code java.time.OffsetDateTime}</li>
+ * <li>{@code java.time.OffsetTime}</li>
+ * <li>{@code java.time.Year}</li>
+ * <li>{@code java.time.YearMonth}</li>
+ * <li>{@code java.time.ZonedDateTime}</li>
+ * <li>{@code java.time.chrono.HijrahDate}</li>
+ * <li>{@code java.time.chrono.JapaneseDate}</li>
+ * <li>{@code java.time.chrono.MinguoDate}</li>
+ * <li>{@code java.time.chrono.ThaiBuddhistDate}</li>
+ * </ul>
+ * </p>
+ *
+ * Other types might be supported in a non-portable manner.
+ *
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(PastOrPresent.List.class)
+public @interface PastOrPresent {
+ String message() default "{javax.validation.constraints.PastOrPresent.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ PastOrPresent[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Pattern.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Pattern.java
index 419e871..68da77b 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Pattern.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Pattern.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -35,10 +37,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Pattern.List.class)
public @interface Pattern {
String regexp();
@@ -78,11 +81,10 @@
}
}
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Pattern[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Positive.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Positive.java
new file mode 100644
index 0000000..e75a0f5
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Positive.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(Positive.List.class)
+public @interface Positive {
+ String message() default "{javax.validation.constraints.Positive.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ Positive[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/PositiveOrZero.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/PositiveOrZero.java
new file mode 100644
index 0000000..b52616f
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/PositiveOrZero.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * @since 2.0
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+@Retention(RUNTIME)
+@Documented
+@Constraint(validatedBy = {})
+@Repeatable(PositiveOrZero.List.class)
+public @interface PositiveOrZero {
+ String message() default "{javax.validation.constraints.PositiveOrZero.message}";
+
+ Class<?>[] groups() default {};
+
+ Class<? extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ PositiveOrZero[] value();
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Size.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Size.java
index 3a0d00d..4a22fd7 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Size.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/constraints/Size.java
@@ -19,6 +19,7 @@
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -27,6 +28,7 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
@@ -36,10 +38,11 @@
*
* @version $Rev$ $Date$
*/
-@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
+@Repeatable(Size.List.class)
public @interface Size {
String message() default "{javax.validation.constraints.Size.message}";
@@ -51,11 +54,10 @@
int max() default Integer.MAX_VALUE;
- @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
Size[] value();
}
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableType.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableType.java
index 119b14a..a6d295e 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableType.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableType.java
@@ -20,4 +20,3 @@
public enum ExecutableType {
IMPLICIT, NONE, CONSTRUCTORS, NON_GETTER_METHODS, GETTER_METHODS, ALL
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableValidator.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableValidator.java
index 9230f6c..5b022bd 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableValidator.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ExecutableValidator.java
@@ -36,4 +36,3 @@
T createdObject,
Class<?>... groups);
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ValidateOnExecution.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ValidateOnExecution.java
index ac7c6c6..d6567d8 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ValidateOnExecution.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/executable/ValidateOnExecution.java
@@ -25,10 +25,12 @@
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Documented;
+
/** @since 1.1 */
@Target({ CONSTRUCTOR, METHOD, TYPE, PACKAGE })
@Retention(RUNTIME)
+@Documented
public @interface ValidateOnExecution {
ExecutableType[] type() default { ExecutableType.IMPLICIT };
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/ConvertGroup.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/ConvertGroup.java
index 2979f01..858aa93 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/ConvertGroup.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/ConvertGroup.java
@@ -17,6 +17,7 @@
package javax.validation.groups;
import java.lang.annotation.Documented;
+import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@@ -24,18 +25,19 @@
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/** @since 1.1 */
-@Target({ TYPE, METHOD, FIELD, CONSTRUCTOR, PARAMETER })
+@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
+@Repeatable(ConvertGroup.List.class)
public @interface ConvertGroup {
- Class<?> from();
+ Class<?> from() default Default.class;
Class<?> to();
- @Target({ TYPE, METHOD, FIELD, CONSTRUCTOR, PARAMETER })
+ @Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/Default.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/Default.java
index 9010e40..2e60842 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/Default.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/groups/Default.java
@@ -23,4 +23,3 @@
*/
public interface Default {
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/BeanDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/BeanDescriptor.java
index 6f6997b..9e5f89c 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/BeanDescriptor.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/BeanDescriptor.java
@@ -33,4 +33,3 @@
ConstructorDescriptor getConstraintsForConstructor(Class<?>... parameterTypes);
Set<ConstructorDescriptor> getConstrainedConstructors();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ConstraintDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ConstraintDescriptor.java
index 65eaa2f..a1a2878 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ConstraintDescriptor.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ConstraintDescriptor.java
@@ -43,9 +43,15 @@
boolean isReportAsSingleViolation();
- // @since 1.1
-
+ /** @since 1.1 */
String getMessageTemplate();
- ConstraintTarget getValidationAppliesTo();
-}
+ /** @since 1.1 */
+ ConstraintTarget getValidationAppliesTo();
+
+ /** @since 2.0 */
+ ValidateUnwrappedValue getValueUnwrapping();
+
+ /** @since 2.0 */
+ <U> U unwrap(Class<U> type);
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ContainerDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ContainerDescriptor.java
new file mode 100644
index 0000000..db04098
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ContainerDescriptor.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.metadata;
+
+import java.util.Set;
+
+/**
+ * @since 2.0
+ */
+public interface ContainerDescriptor {
+
+ Set<ContainerElementTypeDescriptor> getConstrainedContainerElementTypes();
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ContainerElementTypeDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ContainerElementTypeDescriptor.java
new file mode 100644
index 0000000..6242157
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ContainerElementTypeDescriptor.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.metadata;
+
+/**
+ * @since 2.0
+ */
+public interface ContainerElementTypeDescriptor extends ElementDescriptor, CascadableDescriptor, ContainerDescriptor {
+
+ Class<?> getContainerClass();
+
+ Integer getTypeArgumentIndex();
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ExecutableDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ExecutableDescriptor.java
index 1543fb9..fe1f990 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ExecutableDescriptor.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ExecutableDescriptor.java
@@ -27,4 +27,3 @@
boolean hasConstrainedParameters();
boolean hasConstrainedReturnValue();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ParameterDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ParameterDescriptor.java
index ddf26b7..66fb1ff 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ParameterDescriptor.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ParameterDescriptor.java
@@ -17,7 +17,7 @@
package javax.validation.metadata;
/** @since 1.1 */
-public interface ParameterDescriptor extends ElementDescriptor, CascadableDescriptor {
+public interface ParameterDescriptor extends ElementDescriptor, CascadableDescriptor, ContainerDescriptor {
int getIndex();
String getName();
}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/PropertyDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/PropertyDescriptor.java
index f30f31b..e090539 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/PropertyDescriptor.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/PropertyDescriptor.java
@@ -19,7 +19,6 @@
/**
* @version $Rev$ $Date$
*/
-public interface PropertyDescriptor extends ElementDescriptor, CascadableDescriptor {
+public interface PropertyDescriptor extends ElementDescriptor, CascadableDescriptor, ContainerDescriptor {
String getPropertyName();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ReturnValueDescriptor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ReturnValueDescriptor.java
index d973390..4cdd849 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ReturnValueDescriptor.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ReturnValueDescriptor.java
@@ -17,5 +17,5 @@
package javax.validation.metadata;
/** @since 1.1 */
-public interface ReturnValueDescriptor extends ElementDescriptor, CascadableDescriptor {
+public interface ReturnValueDescriptor extends ElementDescriptor, CascadableDescriptor, ContainerDescriptor {
}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/Scope.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/Scope.java
index e8e3a83..3c548f5 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/Scope.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/Scope.java
@@ -23,4 +23,3 @@
LOCAL_ELEMENT,
HIERARCHY
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ValidateUnwrappedValue.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ValidateUnwrappedValue.java
new file mode 100644
index 0000000..a981b1b
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/metadata/ValidateUnwrappedValue.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.metadata;
+
+/**
+ * @since 2.0
+ */
+public enum ValidateUnwrappedValue {
+ DEFAULT, UNWRAP, SKIP;
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/BootstrapState.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/BootstrapState.java
index 659234f..2d4cf73 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/BootstrapState.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/BootstrapState.java
@@ -26,4 +26,3 @@
ValidationProviderResolver getDefaultValidationProviderResolver();
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ConfigurationState.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ConfigurationState.java
index cacf85e..e4ce98d 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ConfigurationState.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ConfigurationState.java
@@ -16,10 +16,13 @@
*/
package javax.validation.spi;
+import javax.validation.ClockProvider;
import javax.validation.ConstraintValidatorFactory;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
import javax.validation.TraversableResolver;
+import javax.validation.valueextraction.ValueExtractor;
+
import java.io.InputStream;
import java.util.Map;
import java.util.Set;
@@ -43,5 +46,10 @@
/** @since 1.1 */
ParameterNameProvider getParameterNameProvider();
-}
+ /** @since 2.0 */
+ Set<ValueExtractor<?>> getValueExtractors();
+
+ /** @since 2.0 */
+ ClockProvider getClockProvider();
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ValidationProvider.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ValidationProvider.java
index 3ca2795..3de71ab 100644
--- a/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ValidationProvider.java
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/spi/ValidationProvider.java
@@ -30,4 +30,3 @@
ValidatorFactory buildValidatorFactory(ConfigurationState configurationState);
}
-
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ExtractedValue.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ExtractedValue.java
new file mode 100644
index 0000000..f5ad305
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ExtractedValue.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.valueextraction;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE_USE)
+@Documented
+public @interface ExtractedValue {
+
+ Class<?> type() default void.class;
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/UnwrapByDefault.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/UnwrapByDefault.java
new file mode 100644
index 0000000..3a1417d
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/UnwrapByDefault.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.valueextraction;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @since 2.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Documented
+public @interface UnwrapByDefault {
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/Unwrapping.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/Unwrapping.java
new file mode 100644
index 0000000..351ab5d
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/Unwrapping.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.valueextraction;
+
+import javax.validation.Payload;
+
+/**
+ * @since 2.0
+ */
+public interface Unwrapping {
+
+ interface Unwrap extends Payload {
+ }
+
+ interface Skip extends Payload {
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractor.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractor.java
new file mode 100644
index 0000000..96ba783
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractor.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.valueextraction;
+
+/**
+ * @since 2.0
+ */
+public interface ValueExtractor<T> {
+ void extractValues(T originalValue, ValueReceiver receiver);
+
+ interface ValueReceiver {
+ void value(String nodeName, Object object);
+
+ void iterableValue(String nodeName, Object object);
+
+ void indexedValue(String nodeName, int i, Object object);
+
+ void keyedValue(String nodeName, Object key, Object object);
+ }
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractorDeclarationException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractorDeclarationException.java
new file mode 100644
index 0000000..51d015e
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractorDeclarationException.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.valueextraction;
+
+import javax.validation.ValidationException;
+
+/**
+ * @since 2.0
+ */
+@SuppressWarnings("serial")
+public class ValueExtractorDeclarationException extends ValidationException {
+
+ public ValueExtractorDeclarationException() {
+ super();
+ }
+
+ public ValueExtractorDeclarationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ValueExtractorDeclarationException(String message) {
+ super(message);
+ }
+
+ public ValueExtractorDeclarationException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractorDefinitionException.java b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractorDefinitionException.java
new file mode 100644
index 0000000..ab5cb60
--- /dev/null
+++ b/geronimo-validation_2.0_spec/src/main/java/javax/validation/valueextraction/ValueExtractorDefinitionException.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package javax.validation.valueextraction;
+
+import javax.validation.ValidationException;
+
+/**
+ * @since 2.0
+ */
+@SuppressWarnings("serial")
+public class ValueExtractorDefinitionException extends ValidationException {
+
+ public ValueExtractorDefinitionException() {
+ super();
+ }
+
+ public ValueExtractorDefinitionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ValueExtractorDefinitionException(String message) {
+ super(message);
+ }
+
+ public ValueExtractorDefinitionException(Throwable cause) {
+ super(cause);
+ }
+
+}