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;