Revision: 1178
          http://stripes.svn.sourceforge.net/stripes/?rev=1178&view=rev
Author:   bengunter
Date:     2009-10-20 17:03:08 +0000 (Tue, 20 Oct 2009)

Log Message:
-----------
Applied fix for STS-664 from 1.5.x branch, along with a required fix to a 
validation unit test.

Modified Paths:
--------------
    
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
    
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java

Added Paths:
-----------
    
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java

Modified: 
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
===================================================================
--- 
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
 2009-10-20 16:36:41 UTC (rev 1177)
+++ 
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
 2009-10-20 17:03:08 UTC (rev 1178)
@@ -181,6 +181,10 @@
                     catch (NoSuchFieldException e) {
                     }
 
+                    // Work around a bug in JDK6 and earlier. See STS-664 for 
more information.
+                    if (accessor != null && accessor.isBridge())
+                        accessor = 
accessor.getDeclaringClass().getMethod(accessor.getName());
+
                     // this method throws an exception if there are conflicts
                     AnnotationInfo annotationInfo = getAnnotationInfo(clazz, 
propertyName,
                         new PropertyWrapper[] {

Modified: 
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java
===================================================================
--- 
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java
   2009-10-20 16:36:41 UTC (rev 1177)
+++ 
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java
   2009-10-20 17:03:08 UTC (rev 1178)
@@ -1,5 +1,7 @@
 package net.sourceforge.stripes.validation;
 
+import java.util.Locale;
+
 import net.sourceforge.stripes.StripesTestFixture;
 import net.sourceforge.stripes.action.ActionBean;
 import net.sourceforge.stripes.action.ActionBeanContext;
@@ -96,16 +98,25 @@
      *
      * @see http://www.stripesframework.org/jira/browse/STS-610
      */
+    @SuppressWarnings("unchecked")
     @Test(groups="extensions")
     public void testValidateTypeConverterDoesNotExtendStock() throws Exception 
{
-        MockRoundtrip trip = new 
MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
-        
StripesFilter.getConfiguration().getTypeConverterFactory().add(String.class, 
MyStringTypeConverter.class);
-        trip.addParameter("shouldBeUpperCased", "test");
-        trip.addParameter("shouldNotBeUpperCased", "test");
-        trip.execute("validateTypeConverters");
-        ValidationAnnotationsTest actionBean = trip.getActionBean(getClass());
-        Assert.assertEquals(actionBean.shouldBeUpperCased, "TEST");
-        Assert.assertEquals(actionBean.shouldNotBeUpperCased, "test");
+        TypeConverterFactory factory = 
StripesFilter.getConfiguration().getTypeConverterFactory();
+        Class<? extends TypeConverter> oldtc = factory.getTypeConverter(//
+                String.class, Locale.getDefault()).getClass();
+        try {
+            MockRoundtrip trip = new 
MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
+            factory.add(String.class, MyStringTypeConverter.class);
+            trip.addParameter("shouldBeUpperCased", "test");
+            trip.addParameter("shouldNotBeUpperCased", "test");
+            trip.execute("validateTypeConverters");
+            ValidationAnnotationsTest actionBean = 
trip.getActionBean(getClass());
+            Assert.assertEquals(actionBean.shouldBeUpperCased, "TEST");
+            Assert.assertEquals(actionBean.shouldNotBeUpperCased, "test");
+        }
+        finally {
+            factory.add(String.class, (Class<? extends TypeConverter<?>>) 
oldtc);
+        }
     }
 
     @Validate(encrypted=true)

Added: 
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java
===================================================================
--- 
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java
                          (rev 0)
+++ 
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java
  2009-10-20 17:03:08 UTC (rev 1178)
@@ -0,0 +1,75 @@
+package net.sourceforge.stripes.validation;
+
+import net.sourceforge.stripes.StripesTestFixture;
+import net.sourceforge.stripes.action.ActionBean;
+import net.sourceforge.stripes.action.ActionBeanContext;
+import net.sourceforge.stripes.action.Resolution;
+import net.sourceforge.stripes.mock.MockRoundtrip;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * Tests some cases where generics have been known to mess up validation.
+ * 
+ * @author Ben Gunter
+ */
+public class ValidationWithGenericsTest {
+    public static class User {
+        private String username, password;
+        public String getUsername() { return username; }
+        public void setUsername(String username) { this.username = username; }
+        public String getPassword() { return password; }
+        public void setPassword(String password) { this.password = password; }
+    }
+
+    public static class BaseActionBean<T> implements ActionBean {
+        private ActionBeanContext context;
+        private T model;
+        public T getModel() { return model; }
+        public void setModel(T model) { this.model = model; }
+        public ActionBeanContext getContext() { return context; }
+        public void setContext(ActionBeanContext context) { this.context = 
context; }
+    }
+
+    public static class TestActionBean extends BaseActionBean<User> {
+        @Override
+        @ValidateNestedProperties( {
+                @Validate(field = "username", required = true),
+                @Validate(field = "password", required = true)
+        })
+        public User getModel() { return super.getModel(); }
+        public Resolution login() { return null; }
+    }
+
+    /**
+     * Attempts to trigger validation errors on an ActionBean declared with a 
type parameter.
+     * Validation was crippled by a bug in JDK6 and earlier.
+     * 
+     * @see http://www.stripesframework.org/jira/browse/STS-664
+     */
+    @Test(groups = "fast")
+    public void testActionBeanWithTypeParameter() throws Exception {
+        // Trigger the validation errors
+        MockRoundtrip trip = new 
MockRoundtrip(StripesTestFixture.getServletContext(),
+                TestActionBean.class);
+        trip.execute("login");
+        ValidationErrors errors = trip.getValidationErrors();
+        Assert.assertNotNull(errors, "Expected validation errors but got 
none");
+        Assert.assertFalse(errors.isEmpty(), "Expected validation errors but 
got none");
+        Assert.assertEquals(errors.size(), 2, "Expected two validation errors 
but got "
+                + errors.size());
+
+        // Now add the required parameters and make sure the validation errors 
don't happen
+        trip.addParameter("model.username", "Scooby");
+        trip.addParameter("model.password", "Shaggy");
+        trip.execute("login");
+        errors = trip.getValidationErrors();
+        Assert.assertTrue(errors == null || errors.isEmpty(), "Got unexpected 
validation errors");
+
+        TestActionBean bean = trip.getActionBean(TestActionBean.class);
+        Assert.assertNotNull(bean);
+        Assert.assertEquals(bean.getModel().getUsername(), "Scooby");
+        Assert.assertEquals(bean.getModel().getPassword(), "Shaggy");
+    }
+}


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to