diff --git a/mrbean/pom.xml b/mrbean/pom.xml
index c03867a4..de7236b0 100644
--- a/mrbean/pom.xml
+++ b/mrbean/pom.xml
@@ -5,7 +5,7 @@
- 4.0.0
+ 4.0.0
com.fasterxml.jackson.module
jackson-modules-base
@@ -56,6 +56,16 @@ ${project.groupId}.mrbean.*;version=${project.version}
replacer
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 1.8
+ 1.8
+
+
+
org.apache.maven.plugins
diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java
index 9d4ffda5..1307a412 100644
--- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java
+++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClasses.java
@@ -16,11 +16,15 @@ public abstract static class Bean
int y;
protected Bean() { }
-
+
public abstract String getX();
public String getFoo() { return "Foo!"; }
public void setY(int value) { y = value; }
+
+ // also verify non-public methods
+ protected abstract String getZ();
+ private String customMethod() { return "Private methods rock!"; }
}
/*
@@ -32,10 +36,12 @@ protected Bean() { }
public void testSimpleInteface() throws Exception
{
ObjectMapper mapper = newMrBeanMapper();
- Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13 }", Bean.class);
+ Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13, \"z\" : \"def\" }", Bean.class);
assertNotNull(bean);
assertEquals("abc", bean.getX());
assertEquals(13, bean.y);
assertEquals("Foo!", bean.getFoo());
+ assertEquals("def", bean.getZ());
+ assertEquals("Private methods rock!", bean.customMethod());
}
}
diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java
index a3938c0a..82deaac4 100644
--- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java
+++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestAbstractClassesWithOverrides.java
@@ -16,19 +16,28 @@ public abstract static class Bean
int y;
protected Bean() { }
-
+
public abstract String getX();
public abstract String roast(int temperature);
public String getFoo() { return "Foo!"; }
public void setY(int value) { y = value; }
+
+ // also verify non-public methods
+ protected abstract String getZ();
+ private Object customMethod() { return protectedAbstractMethod(); }
+ protected abstract Object protectedAbstractMethod();
}
public abstract static class CoffeeBean extends Bean {
@Override public String roast(int temperature) {
return "The coffee beans are roasting at " + temperature + " degrees now, yummy";
}
+
+ @Override protected Object protectedAbstractMethod() {
+ return "Private methods invoking protected abstract methods is the bomb!";
+ }
}
public abstract static class PeruvianCoffeeBean extends CoffeeBean {}
@@ -45,10 +54,10 @@ public void testOverrides() throws Exception
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new MrBeanModule());
- Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13 }", CoffeeBean.class);
+ Bean bean = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13, \"z\" : \"def\" }", CoffeeBean.class);
verifyBean(bean);
- Bean bean2 = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13 }", PeruvianCoffeeBean.class);
+ Bean bean2 = mapper.readValue("{ \"x\" : \"abc\", \"y\" : 13, \"z\" : \"def\" }", PeruvianCoffeeBean.class);
verifyBean(bean2);
}
@@ -57,6 +66,8 @@ private void verifyBean(Bean bean) {
assertEquals("abc", bean.getX());
assertEquals(13, bean.y);
assertEquals("Foo!", bean.getFoo());
+ assertEquals("def", bean.getZ());
assertEquals("The coffee beans are roasting at 123 degrees now, yummy", bean.roast(123));
+ assertEquals("Private methods invoking protected abstract methods is the bomb!", bean.customMethod());
}
}
diff --git a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java
index f4d252a9..f80fc571 100644
--- a/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java
+++ b/mrbean/src/test/java/com/fasterxml/jackson/module/mrbean/TestSimpleMaterializedInterfaces.java
@@ -26,13 +26,13 @@ public interface BeanWithY extends Bean
{
public int getY();
}
-
+
public interface PartialBean {
public boolean isOk();
// and then non-getter/setter one:
public int foobar();
}
-
+
public interface BeanHolder {
public Bean getBean();
}
@@ -53,7 +53,13 @@ public interface ArrayBean {
interface NonPublicBean {
public abstract int getX();
}
-
+
+ public interface ExtendedBean extends Bean {
+ public default boolean anyValuePresent() {
+ return getX() > 0 || getA() != null;
+ }
+ }
+
/*
/**********************************************************
/* Unit tests, low level
@@ -149,8 +155,8 @@ public void testBeanHolder() throws Exception
assertNotNull(bean);
assertEquals("b", bean.getA());
assertEquals(-4, bean.getX());
- }
-
+ }
+
public void testArrayInterface() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
@@ -172,7 +178,17 @@ public void testSubInterface() throws Exception
assertEquals(1, bean.getX());
assertEquals(2, bean.getY());
}
-
+
+ public void testDefaultMethods() throws Exception
+ {
+ ObjectMapper mapper = newMrBeanMapper();
+ ExtendedBean bean = mapper.readValue("{\"a\":\"value\",\"x\":123 }", ExtendedBean.class);
+ assertNotNull(bean);
+ assertEquals("value", bean.getA());
+ assertEquals(123, bean.getX());
+ assertTrue(bean.anyValuePresent());
+ }
+
/*
/**********************************************************
/* Unit tests, higher level, error handling
@@ -212,6 +228,6 @@ public void testNonPublic() throws Exception
} catch (JsonMappingException e) {
verifyException(e, "is not public");
}
- }
-
+ }
+
}