Author: pedro
Date: Mon Dec 13 12:43:51 2010
New Revision: 1045098

URL: http://svn.apache.org/viewvc?rev=1045098&view=rev
Log:
- Preventing the attempt to resolve the property class for a null target at 
AbstractPropertyModel
- Test asserting that there is no problem in working with an 
AbstractPropertyModel targeting an IObjectClassAwareModel not initialized with 
an known class.
Issue: WICKET-3253

Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java?rev=1045098&r1=1045097&r2=1045098&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/model/AbstractPropertyModel.java
 Mon Dec 13 12:43:51 2010
@@ -247,8 +247,11 @@ public abstract class AbstractPropertyMo
                {
                        try
                        {
-                               return 
PropertyResolver.getPropertyClass(expression,
-                                       
((IObjectClassAwareModel<?>)this.target).getObjectClass());
+                               Class<?> targetClass = 
((IObjectClassAwareModel<?>)this.target).getObjectClass();
+                               if (targetClass != null)
+                               {
+                                       return 
PropertyResolver.getPropertyClass(expression, targetClass);
+                               }
                        }
                        catch (WicketRuntimeException e)
                        {

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java?rev=1045098&r1=1045097&r2=1045098&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/model/AbstractPropertyModelObjectClassTest.java
 Mon Dec 13 12:43:51 2010
@@ -21,12 +21,12 @@ import java.io.Serializable;
 import junit.framework.TestCase;
 
 /**
- * https://issues.apache.org/jira/browse/WICKET-2937
- * 
  * <p>
  * If AbstractPropertyModel has an target that implements the 
IObjectClassAwareModel interface then
  * the class of that target is used to infer the modeled property type.
+ * </p>
  * 
+ * @see <a 
href="https://issues.apache.org/jira/browse/WICKET-2937";>WICKET-2937</a>
  * @author Pedro Santos
  */
 public class AbstractPropertyModelObjectClassTest extends TestCase
@@ -63,6 +63,24 @@ public class AbstractPropertyModelObject
                        "someProperty").getObjectClass());
        }
 
+       /**
+        * Asserting that there is no problem in working with an 
AbstractPropertyModel targeting an
+        * IObjectClassAwareModel not initialized with an known class.
+        * 
+        * @see <a 
href="https://issues.apache.org/jira/browse/WICKET-3253";>WICKET-3253</a>
+        */
+       public void testLazyClassResolution()
+       {
+               Model<CustomBean> modelCustomBean = new Model<CustomBean>(null);
+               PropertyModel<CustomType> customTypeModel = new 
PropertyModel<CustomType>(modelCustomBean,
+                       "customType");
+               PropertyModel<Integer> somePropertyModel = new 
PropertyModel<Integer>(customTypeModel,
+                       "someProperty");
+               assertNull(somePropertyModel.getObjectClass());
+               modelCustomBean.setObject(new CustomBean());
+               assertEquals(Integer.class, somePropertyModel.getObjectClass());
+       }
+
        private static class CustomType implements Serializable
        {
                private Integer someProperty;


Reply via email to