From 3be0942fb2552b021ef0c2ee7ccaa58296931362 Mon Sep 17 00:00:00 2001 From: Carl-Eric Menzel Date: Mon, 12 Sep 2011 18:17:27 +0200 Subject: [PATCH 1/3] [maven-release-plugin] prepare release safemodel1.4-1.3.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 819bd1d..647b865 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ de.wicketbuch.safemodel safemodel1.4 jar - 1.4-SNAPSHOT + 1.3.2 SafeModel From 761c41ecf4f9d0027c10b6ce75e9872aed8c53f0 Mon Sep 17 00:00:00 2001 From: Carl-Eric Menzel Date: Mon, 12 Sep 2011 18:17:36 +0200 Subject: [PATCH 2/3] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 647b865..819bd1d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ de.wicketbuch.safemodel safemodel1.4 jar - 1.3.2 + 1.4-SNAPSHOT SafeModel From eede8623fdeb4c0b07d4a37c6da1e5abe23fe37d Mon Sep 17 00:00:00 2001 From: Carl-Eric Menzel Date: Tue, 3 Apr 2012 19:00:52 +0200 Subject: [PATCH 3/3] fixed problem in model object type reflection. now looking at target object too, if there is one --- pom.xml | 2 +- .../de/wicketbuch/safemodel/SafeModel.java | 38 ++++++++++++------- .../wicketbuch/safemodel/SafeModelTest.java | 22 +++++++++++ 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index 819bd1d..344dc20 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ - 1.4.18 + 1.4.20 UTF-8 1.5.8 diff --git a/src/main/java/de/wicketbuch/safemodel/SafeModel.java b/src/main/java/de/wicketbuch/safemodel/SafeModel.java index de91a25..83ac517 100644 --- a/src/main/java/de/wicketbuch/safemodel/SafeModel.java +++ b/src/main/java/de/wicketbuch/safemodel/SafeModel.java @@ -295,19 +295,26 @@ public static U imposterise(final Class classToImposterize, Invokable han @SuppressWarnings("unchecked") private static Class reflectModelObjectType(final IModel target) throws Error { - final Method getObject; - try { - getObject = target.getClass().getMethod("getObject"); - } catch (final NoSuchMethodException e) { - throw new Error(); - } - final Type type = GenericTypeReflector.getExactReturnType(getObject, target.getClass()); - if (type instanceof Class) { - return (Class) type; - } else if (type instanceof ParameterizedType) { - return (Class) ((ParameterizedType) type).getRawType(); + final U targetObject = target.getObject(); + if (targetObject == null) { + final Method getObject; + try { + getObject = target.getClass().getMethod("getObject"); + } catch (final NoSuchMethodException e) { + throw new Error(); + } + final Type type = GenericTypeReflector.getExactReturnType(getObject, target.getClass()); + final Class reflectedType; + if (type instanceof Class) { + reflectedType = (Class) type; + } else if (type instanceof ParameterizedType) { + reflectedType = (Class) ((ParameterizedType) type).getRawType(); + } else { + throw new UnsupportedOperationException("don't know how to find the type"); + } + return reflectedType; // can't do anything else here } else { - throw new UnsupportedOperationException("don't know how to find the type"); + return (Class) targetObject.getClass(); } } @@ -356,7 +363,12 @@ public Object invoke(final Invocation invocation) throws Throwable { } else if (Object.class.equals(returnType)) { return ClassImposteriser.INSTANCE.imposterise(BLOCKER, Object.class); } else { - return ClassImposteriser.INSTANCE.imposterise(BLOCKER, returnType); + try { + return ClassImposteriser.INSTANCE.imposterise(BLOCKER, returnType); + } catch (ClassCastException e) { + // some classloading problem in an appserver... maybe we can get by with just a null: + return null; + } } } } diff --git a/src/test/java/de/wicketbuch/safemodel/SafeModelTest.java b/src/test/java/de/wicketbuch/safemodel/SafeModelTest.java index b7d7d24..c7b03e6 100644 --- a/src/test/java/de/wicketbuch/safemodel/SafeModelTest.java +++ b/src/test/java/de/wicketbuch/safemodel/SafeModelTest.java @@ -31,6 +31,7 @@ import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; import org.apache.wicket.util.tester.WicketTester; import org.jmock.api.Invocation; import org.jmock.api.Invokable; @@ -327,4 +328,25 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl IModel model = model(fromService(mockedService).loadMid(42)); assertSame(expected, model.getObject()); } + + public static class SomethingSerializable implements Serializable { + private String foo; + + public String getFoo() { + return foo; + } + + public void setFoo(String foo) { + this.foo = foo; + } + } + + @Test + public void nonreflectableModel() throws Exception { + final SomethingSerializable something = new SomethingSerializable(); + something.setFoo("bar"); + Model rootModel = new Model(something); + IModel propmodel = model(from(rootModel).getFoo()); + assertEquals("bar", propmodel.getObject()); + } }