r2612 - in trunk/src: main/java/org/nuiton/util/beans test/java/org/nuiton/util/beans
Author: sbavencoff Date: 2013-12-12 14:12:36 +0100 (Thu, 12 Dec 2013) New Revision: 2612 Url: http://nuiton.org/projects/nuiton-utils/repository/revisions/2612 Log: fixes #2964 : Error when copy a null property with Binder Modified: trunk/src/main/java/org/nuiton/util/beans/Binder.java trunk/src/test/java/org/nuiton/util/beans/BinderTest.java Modified: trunk/src/main/java/org/nuiton/util/beans/Binder.java =================================================================== --- trunk/src/main/java/org/nuiton/util/beans/Binder.java 2013-12-12 10:04:37 UTC (rev 2611) +++ trunk/src/main/java/org/nuiton/util/beans/Binder.java 2013-12-12 13:12:36 UTC (rev 2612) @@ -553,8 +553,11 @@ @SuppressWarnings({"unchecked"}) protected Object bind(Binder binder, Object read) throws IllegalAccessException, InstantiationException { - Object result = read.getClass().newInstance(); - binder.copy(read, result); + Object result = null; + if (read != null) { + result = read.getClass().newInstance(); + binder.copy(read, result); + } return result; } Modified: trunk/src/test/java/org/nuiton/util/beans/BinderTest.java =================================================================== --- trunk/src/test/java/org/nuiton/util/beans/BinderTest.java 2013-12-12 10:04:37 UTC (rev 2611) +++ trunk/src/test/java/org/nuiton/util/beans/BinderTest.java 2013-12-12 13:12:36 UTC (rev 2612) @@ -40,10 +40,14 @@ BeanB b; + BeanC c; + Binder<BeanA, BeanA> binderA; Binder<BeanA, BeanB> binderB; + Binder<BeanC, BeanC> binderC; + private static final String VALUE_A = "a"; private static final String VALUE_B = "b"; @@ -78,6 +82,16 @@ // register the model into factory BinderFactory.registerBinderModel(builder1); + // creates a binder model from A -> B with more properties + + BinderModelBuilder<BeanC, BeanC> builder2 = + BinderModelBuilder.newEmptyBuilder(BeanC.class, BeanC.class). + addSimpleProperties(BeanC.PROPERTY_A). + addBinder(BeanC.PROPERTY_A, builder.toBinder()); + + // register the model into factory + BinderFactory.registerBinderModel(builder2); + } @AfterClass @@ -97,8 +111,12 @@ // get the binder A -> B binderB = BinderFactory.newBinder(BeanA.class, BeanB.class); + // get the binder C -> C + binderC = BinderFactory.newBinder(BeanC.class); + a = new BeanA(); b = new BeanB(); + c = new BeanC(); } @Test @@ -173,6 +191,20 @@ Assert.assertNull(b.getC2()); Assert.assertEquals(0, b.getE2()); + c.setA(a); + BeanC cTarget = new BeanC(); + binderC.copy(c, cTarget); + Assert.assertNotEquals(c.getA(), cTarget.getA()); + Assert.assertEquals(c.getA().getA(), cTarget.getA().getA()); + Assert.assertNull(cTarget.getA().getB()); + Assert.assertNull(cTarget.getA().getC()); + Assert.assertNull(cTarget.getA().getD()); + + c.setA(null); + cTarget = new BeanC(); + binderC.copy(c, cTarget); + Assert.assertNull(cTarget.getA()); + } @Test
participants (1)
-
sbavencoffļ¼ users.nuiton.org