From 2b4c4ee37b7b3801f9443da71aec8aacbb05a97c Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 21 Nov 2016 11:25:14 +0000 Subject: [PATCH] Make Classifier Serializable --- .../classify/BackToBackPatternClassifier.java | 1 + .../classify/BinaryExceptionClassifier.java | 3 +-- .../java/org/springframework/classify/Classifier.java | 9 +++++++-- .../org/springframework/classify/ClassifierAdapter.java | 1 + .../org/springframework/classify/ClassifierSupport.java | 4 +--- .../classify/PatternMatchingClassifier.java | 1 + .../classify/BackToBackPatternClassifierTests.java | 1 + .../springframework/classify/ClassifierAdapterTests.java | 2 ++ .../policy/ExceptionClassifierRetryPolicyTests.java | 1 + .../retry/policy/RetryContextSerializationTests.java | 8 ++++++-- .../retry/support/DefaultRetryStateTests.java | 2 ++ 11 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/springframework/classify/BackToBackPatternClassifier.java b/src/main/java/org/springframework/classify/BackToBackPatternClassifier.java index 4acd93d..1e800ce 100644 --- a/src/main/java/org/springframework/classify/BackToBackPatternClassifier.java +++ b/src/main/java/org/springframework/classify/BackToBackPatternClassifier.java @@ -24,6 +24,7 @@ import java.util.Map; * @author Dave Syer * */ +@SuppressWarnings("serial") public class BackToBackPatternClassifier implements Classifier { private Classifier router; diff --git a/src/main/java/org/springframework/classify/BinaryExceptionClassifier.java b/src/main/java/org/springframework/classify/BinaryExceptionClassifier.java index 39e45ba..632b313 100644 --- a/src/main/java/org/springframework/classify/BinaryExceptionClassifier.java +++ b/src/main/java/org/springframework/classify/BinaryExceptionClassifier.java @@ -15,7 +15,6 @@ */ package org.springframework.classify; -import java.io.Serializable; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -34,7 +33,7 @@ import java.util.Map; * */ @SuppressWarnings("serial") -public class BinaryExceptionClassifier extends SubclassClassifier implements Serializable { +public class BinaryExceptionClassifier extends SubclassClassifier { private boolean traverseCauses; diff --git a/src/main/java/org/springframework/classify/Classifier.java b/src/main/java/org/springframework/classify/Classifier.java index 26f9214..a440550 100644 --- a/src/main/java/org/springframework/classify/Classifier.java +++ b/src/main/java/org/springframework/classify/Classifier.java @@ -16,14 +16,19 @@ package org.springframework.classify; +import java.io.Serializable; + /** * Interface for a classifier. At its simplest a {@link Classifier} is just a map from * objects of one type to objects of another type. - * + * + * Note that implementations can only be serializable if the parameter types are + * themselves serializable. + * * @author Dave Syer * */ -public interface Classifier { +public interface Classifier extends Serializable { /** * Classify the given object and return an object of a different type, possibly an diff --git a/src/main/java/org/springframework/classify/ClassifierAdapter.java b/src/main/java/org/springframework/classify/ClassifierAdapter.java index feb2a2d..0341db6 100644 --- a/src/main/java/org/springframework/classify/ClassifierAdapter.java +++ b/src/main/java/org/springframework/classify/ClassifierAdapter.java @@ -25,6 +25,7 @@ import org.springframework.util.Assert; * @author Dave Syer * */ +@SuppressWarnings("serial") public class ClassifierAdapter implements Classifier { private MethodInvoker invoker; diff --git a/src/main/java/org/springframework/classify/ClassifierSupport.java b/src/main/java/org/springframework/classify/ClassifierSupport.java index 7892b2c..5e0a54b 100644 --- a/src/main/java/org/springframework/classify/ClassifierSupport.java +++ b/src/main/java/org/springframework/classify/ClassifierSupport.java @@ -16,8 +16,6 @@ package org.springframework.classify; -import java.io.Serializable; - /** * Base class for {@link Classifier} implementations. Provides default behaviour * and some convenience members, like constants. @@ -26,7 +24,7 @@ import java.io.Serializable; * */ @SuppressWarnings("serial") -public class ClassifierSupport implements Classifier, Serializable { +public class ClassifierSupport implements Classifier { final private T defaultValue; diff --git a/src/main/java/org/springframework/classify/PatternMatchingClassifier.java b/src/main/java/org/springframework/classify/PatternMatchingClassifier.java index b020047..b0efef7 100644 --- a/src/main/java/org/springframework/classify/PatternMatchingClassifier.java +++ b/src/main/java/org/springframework/classify/PatternMatchingClassifier.java @@ -27,6 +27,7 @@ import java.util.Map; * @author Dave Syer * */ +@SuppressWarnings("serial") public class PatternMatchingClassifier implements Classifier { private PatternMatcher values; diff --git a/src/test/java/org/springframework/classify/BackToBackPatternClassifierTests.java b/src/test/java/org/springframework/classify/BackToBackPatternClassifierTests.java index 0f8fc92..7af72ec 100644 --- a/src/test/java/org/springframework/classify/BackToBackPatternClassifierTests.java +++ b/src/test/java/org/springframework/classify/BackToBackPatternClassifierTests.java @@ -76,6 +76,7 @@ public class BackToBackPatternClassifierTests { assertEquals("spam", classifier.classify("oof")); } + @SuppressWarnings("serial") private class RouterDelegate implements org.springframework.classify.Classifier { diff --git a/src/test/java/org/springframework/classify/ClassifierAdapterTests.java b/src/test/java/org/springframework/classify/ClassifierAdapterTests.java index 3fe1dc7..b402e1d 100644 --- a/src/test/java/org/springframework/classify/ClassifierAdapterTests.java +++ b/src/test/java/org/springframework/classify/ClassifierAdapterTests.java @@ -79,6 +79,7 @@ public class ClassifierAdapterTests { assertEquals(23, adapter.classify("23").intValue()); } + @SuppressWarnings({ "serial" }) @Test public void testClassifierAdapterClassifier() { adapter = new ClassifierAdapter( @@ -112,6 +113,7 @@ public class ClassifierAdapterTests { assertEquals(23, adapter.classify("23").intValue()); } + @SuppressWarnings("serial") @Test public void testClassifyWithClassifier() { adapter.setDelegate(new org.springframework.classify.Classifier() { diff --git a/src/test/java/org/springframework/retry/policy/ExceptionClassifierRetryPolicyTests.java b/src/test/java/org/springframework/retry/policy/ExceptionClassifierRetryPolicyTests.java index 53451a1..6dc1624 100644 --- a/src/test/java/org/springframework/retry/policy/ExceptionClassifierRetryPolicyTests.java +++ b/src/test/java/org/springframework/retry/policy/ExceptionClassifierRetryPolicyTests.java @@ -68,6 +68,7 @@ public class ExceptionClassifierRetryPolicyTests { assertTrue(policy.canRetry(context)); } + @SuppressWarnings("serial") @Test public void testClassifierOperates() throws Exception { diff --git a/src/test/java/org/springframework/retry/policy/RetryContextSerializationTests.java b/src/test/java/org/springframework/retry/policy/RetryContextSerializationTests.java index 1a5d448..243fc45 100644 --- a/src/test/java/org/springframework/retry/policy/RetryContextSerializationTests.java +++ b/src/test/java/org/springframework/retry/policy/RetryContextSerializationTests.java @@ -30,6 +30,7 @@ import org.junit.runners.Parameterized.Parameters; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.classify.SubclassClassifier; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.core.type.filter.AssignableTypeFilter; import org.springframework.core.type.filter.RegexPatternTypeFilter; @@ -51,7 +52,7 @@ public class RetryContextSerializationTests { private RetryPolicy policy; - @Parameters + @Parameters(name = "{index}: {0}") public static List policies() { List result = new ArrayList(); ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(true); @@ -63,9 +64,12 @@ public class RetryContextSerializationTests { try { result.add(new Object[] { BeanUtils.instantiate(ClassUtils.resolveClassName(beanDefinition.getBeanClassName(), null)) }); } catch (Exception e) { - logger.warn("Cannot create instance of " + beanDefinition.getBeanClassName()); + logger.warn("Cannot create instance of " + beanDefinition.getBeanClassName(), e); } } + ExceptionClassifierRetryPolicy extra = new ExceptionClassifierRetryPolicy(); + extra.setExceptionClassifier(new SubclassClassifier(new AlwaysRetryPolicy())); + result.add(new Object[] { extra }); return result; } diff --git a/src/test/java/org/springframework/retry/support/DefaultRetryStateTests.java b/src/test/java/org/springframework/retry/support/DefaultRetryStateTests.java index 99cb613..ad8aa90 100644 --- a/src/test/java/org/springframework/retry/support/DefaultRetryStateTests.java +++ b/src/test/java/org/springframework/retry/support/DefaultRetryStateTests.java @@ -32,6 +32,7 @@ public class DefaultRetryStateTests { * Test method for * {@link org.springframework.retry.support.DefaultRetryState#DefaultRetryState(java.lang.Object, boolean, org.springframework.classify.Classifier)}. */ + @SuppressWarnings("serial") @Test public void testDefaultRetryStateObjectBooleanClassifierOfQsuperThrowableBoolean() { DefaultRetryState state = new DefaultRetryState("foo", true, new Classifier() { @@ -48,6 +49,7 @@ public class DefaultRetryStateTests { * Test method for * {@link org.springframework.retry.support.DefaultRetryState#DefaultRetryState(java.lang.Object, org.springframework.classify.Classifier)}. */ + @SuppressWarnings("serial") @Test public void testDefaultRetryStateObjectClassifierOfQsuperThrowableBoolean() { DefaultRetryState state = new DefaultRetryState("foo", new Classifier() {