Merge pull request #120 from jungm/402-jsonbtypeinfoscanning-rework
[JOHNZON-402] Reworked scanning for @JsonbTypeInfo annotations
diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java
index c953288..7fcc019 100644
--- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java
+++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/polymorphism/JsonbPolymorphismTest.java
@@ -42,6 +42,17 @@
@Rule public JsonbRule jsonb = new JsonbRule();
@Test
+ public void testNestedSerialization() {
+ Labrador labrador = new Labrador();
+ labrador.dogAge = 3;
+ labrador.labradorName = "john";
+ AnimalWrapper wrapper = new AnimalWrapper();
+ wrapper.animal = labrador;
+
+ assertEquals("{\"animal\":{\"@animal\":\"dog\",\"@dog\":\"labrador\",\"dogAge\":3,\"labradorName\":\"john\"}}", jsonb.toJson(wrapper));
+ }
+
+ @Test
public void testSerialization() {
Labrador labrador = new Labrador();
labrador.dogAge = 3;
@@ -100,6 +111,10 @@
}
+ public static class AnimalWrapper {
+ public Animal animal;
+ }
+
@JsonbTypeInfo(key = "@animal", value = @JsonbSubtype(alias = "dog", type = Dog.class))
public interface Animal {
}
diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
index cf44c5c..c06f38d 100644
--- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
+++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
@@ -192,12 +192,6 @@
generator.writeStartObject();
}
- if (classMapping.serializedPolymorphicProperties != null) {
- for (Map.Entry<String, String> polymorphicProperty : classMapping.serializedPolymorphicProperties) {
- generator.write(polymorphicProperty.getKey(), polymorphicProperty.getValue());
- }
- }
-
final boolean writeEnd = doWriteObjectBody(object, ignoredProperties, jsonPointer, generator);
if (writeEnd && writeBody) {
generator.writeEnd();
@@ -376,6 +370,12 @@
return true;
}
+ if (classMapping.serializedPolymorphicProperties != null) {
+ for (Map.Entry<String, String> polymorphicProperty : classMapping.serializedPolymorphicProperties) {
+ generator.write(polymorphicProperty.getKey(), polymorphicProperty.getValue());
+ }
+ }
+
for (final Map.Entry<String, Mappings.Getter> getterEntry : classMapping.getters.entrySet()) {
final Mappings.Getter getter = getterEntry.getValue();
if (ignored != null && ignored.contains(getterEntry.getKey())) {