[hibernate-commits] Hibernate SVN: r17609 - in validator/trunk/hibernate-validator/src: main/java/org/hibernate/validator/metadata and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Oct 1 12:08:52 EDT 2009


Author: hardy.ferentschik
Date: 2009-10-01 12:08:48 -0400 (Thu, 01 Oct 2009)
New Revision: 17609

Added:
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/ConstraintViolationSerializationTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/SerializableClass.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/UnSerializableClass.java
Modified:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConstraintViolationImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/NodeImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/PathImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/metadata/ConstraintDescriptorImpl.java
Log:
HV-245 Made ConstraintViolationImpl Serializable.

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConstraintViolationImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConstraintViolationImpl.java	2009-10-01 14:07:23 UTC (rev 17608)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/ConstraintViolationImpl.java	2009-10-01 16:08:48 UTC (rev 17609)
@@ -26,7 +26,7 @@
  * @author Emmanuel Bernard
  * @author Hardy Ferentschik
  */
-public class ConstraintViolationImpl<T> implements ConstraintViolation<T> {
+public class ConstraintViolationImpl<T> implements ConstraintViolation<T>, java.io.Serializable {
 	private final String interpolatedMessage;
 	private final T rootBean;
 	private final Object value;

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/NodeImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/NodeImpl.java	2009-10-01 14:07:23 UTC (rev 17608)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/NodeImpl.java	2009-10-01 16:08:48 UTC (rev 17609)
@@ -17,12 +17,13 @@
 */
 package org.hibernate.validator.engine;
 
+import java.io.Serializable;
 import javax.validation.Path;
 
 /**
  * @author Hardy Ferentschik
  */
-public class NodeImpl implements Path.Node {
+public class NodeImpl implements Path.Node, Serializable {
 
 	private static final String INDEX_OPEN = "[";
 	private static final String INDEX_CLOSE = "]";

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/PathImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/PathImpl.java	2009-10-01 14:07:23 UTC (rev 17608)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/engine/PathImpl.java	2009-10-01 16:08:48 UTC (rev 17609)
@@ -22,12 +22,13 @@
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.io.Serializable;
 import javax.validation.Path;
 
 /**
  * @author Hardy Ferentschik
  */
-public class PathImpl implements Path {
+public class PathImpl implements Path, Serializable {
 
 	/**
 	 * Regular expression used to split a string path into its elements.

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/metadata/ConstraintDescriptorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/metadata/ConstraintDescriptorImpl.java	2009-10-01 14:07:23 UTC (rev 17608)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validator/metadata/ConstraintDescriptorImpl.java	2009-10-01 16:08:48 UTC (rev 17609)
@@ -17,6 +17,7 @@
 */
 package org.hibernate.validator.metadata;
 
+import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -31,9 +32,9 @@
 import java.util.Set;
 import javax.validation.Constraint;
 import javax.validation.ConstraintDefinitionException;
-import javax.validation.Payload;
 import javax.validation.ConstraintValidator;
 import javax.validation.OverridesAttribute;
+import javax.validation.Payload;
 import javax.validation.ReportAsSingleViolation;
 import javax.validation.ValidationException;
 import javax.validation.groups.Default;
@@ -55,7 +56,7 @@
  * @author Emmanuel Bernard
  * @author Hardy Ferentschik
  */
-public class ConstraintDescriptorImpl<T extends Annotation> implements ConstraintDescriptor<T> {
+public class ConstraintDescriptorImpl<T extends Annotation> implements ConstraintDescriptor<T>, Serializable {
 	private static final Logger log = LoggerFactory.make();
 	private static final int OVERRIDES_PARAMETER_DEFAULT_INDEX = -1;
 	private static final String GROUPS = "groups";
@@ -98,7 +99,7 @@
 	/**
 	 * Handle to the built-in constraint implementations.
 	 */
-	private final ConstraintHelper constraintHelper;
+	private transient final ConstraintHelper constraintHelper;
 
 	public ConstraintDescriptorImpl(T annotation, ConstraintHelper constraintHelper, Class<?> implicitGroup) {
 		this.annotation = annotation;
@@ -216,7 +217,7 @@
 		return groups;
 	}
 
-	public Set<Class< ? extends Payload>> getPayload() {
+	public Set<Class<? extends Payload>> getPayload() {
 		return payloads;
 	}
 
@@ -418,7 +419,7 @@
 		// groups get inherited from the parent
 		annotationDescriptor.setValue( GROUPS, groups.toArray( new Class<?>[groups.size()] ) );
 
-	    // HV-183 - payloads are propagated to composing constraints
+		// HV-183 - payloads are propagated to composing constraints
 		annotationDescriptor.setValue( PAYLOAD, payloads.toArray( new Class<?>[payloads.size()] ) );
 
 		U annotationProxy = AnnotationFactory.create( annotationDescriptor );

Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/ConstraintViolationSerializationTest.java (from rev 17597, validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/ValidatorTest.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/ConstraintViolationSerializationTest.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/ConstraintViolationSerializationTest.java	2009-10-01 16:08:48 UTC (rev 17609)
@@ -0,0 +1,85 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat, Inc. and/or its affiliates, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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 org.hibernate.validator.engine.serialization;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.NotSerializableException;
+import java.util.Set;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validator;
+
+import org.testng.annotations.Test;
+
+import org.hibernate.validator.util.TestUtil;
+import static org.hibernate.validator.util.TestUtil.assertNumberOfViolations;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class ConstraintViolationSerializationTest {
+
+	/**
+	 * HV-245
+	 */
+	@Test
+	public void testSuccessfulSerialization() throws Exception {
+		Validator validator = TestUtil.getValidator();
+		SerializableClass testInstance = new SerializableClass();
+		Set<ConstraintViolation<SerializableClass>> constraintViolations = validator.validate( testInstance );
+
+		byte[] bytes = serialize( constraintViolations );
+		Set<ConstraintViolation<?>> deserializedViolations = deserialize( bytes );
+		assertNumberOfViolations( deserializedViolations, 1 );
+	}
+
+	/**
+	 * HV-245
+	 */
+	@Test(expectedExceptions = NotSerializableException.class)
+	public void testUnSuccessfulSerialization() throws Exception {
+		Validator validator = TestUtil.getValidator();
+		UnSerializableClass testInstance = new UnSerializableClass();
+		Set<ConstraintViolation<UnSerializableClass>> constraintViolations = validator.validate( testInstance );
+
+		serialize( constraintViolations );
+	}
+
+	private byte[] serialize(Object o) throws Exception {
+		ByteArrayOutputStream stream = new ByteArrayOutputStream();
+		ObjectOutput out = new ObjectOutputStream( stream );
+		out.writeObject( o );
+		out.close();
+		byte[] serialized = stream.toByteArray();
+		stream.close();
+		return serialized;
+
+	}
+
+	private Set<ConstraintViolation<?>> deserialize(byte[] byteData) throws Exception {
+		ByteArrayInputStream byteIn = new ByteArrayInputStream( byteData );
+		ObjectInputStream in = new ObjectInputStream( byteIn );
+		Set<ConstraintViolation<?>> deserializedViolations = ( Set<ConstraintViolation<?>> ) in.readObject();
+		in.close();
+		byteIn.close();
+		return deserializedViolations;
+	}
+}
\ No newline at end of file

Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/SerializableClass.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/SerializableClass.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/SerializableClass.java	2009-10-01 16:08:48 UTC (rev 17609)
@@ -0,0 +1,29 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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 org.hibernate.validator.engine.serialization;
+
+import java.io.Serializable;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class SerializableClass implements Serializable {
+	@NotNull
+	private String foo;
+}

Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/UnSerializableClass.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/UnSerializableClass.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validator/engine/serialization/UnSerializableClass.java	2009-10-01 16:08:48 UTC (rev 17609)
@@ -0,0 +1,28 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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 org.hibernate.validator.engine.serialization;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class UnSerializableClass {
+	@NotNull
+	private String foo;
+}
\ No newline at end of file



More information about the hibernate-commits mailing list