Suppress typeName if not set explicitly on DoEntity
diff --git a/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java b/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java
index 76b7809..77464c7 100644
--- a/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java
+++ b/org.eclipse.scout.rt.dataobject/src/main/java/org/eclipse/scout/rt/dataobject/DataObjectInventory.java
@@ -82,6 +82,14 @@
}
/**
+ * @return if specified class {@code clazz} has a type name. If the class does not have a type name, the super class
+ * hierarchy is searched for the first available type name.
+ */
+ public boolean hasTypeName(Class<?> queryClazz) {
+ return toTypeName(queryClazz) != null;
+ }
+
+ /**
* @return type name for specified class {@code clazz}. If the class does not have a type name, the super class
* hierarchy is searched for the first available type name. Returns {@code null} if no type name can be found.
*/
diff --git a/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java
index 7d1dc4d..46e9609 100644
--- a/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java
+++ b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/JsonDataObjectsSerializationTest.java
@@ -88,6 +88,7 @@
import org.eclipse.scout.rt.jackson.dataobject.fixture.TestSubPojo;
import org.eclipse.scout.rt.jackson.dataobject.fixture.TestThrowableDo;
import org.eclipse.scout.rt.jackson.dataobject.fixture.TestVersionedDo;
+import org.eclipse.scout.rt.jackson.dataobject.fixture.TestWithoutTypeDo;
import org.eclipse.scout.rt.jackson.testing.DataObjectSerializationTestHelper;
import org.eclipse.scout.rt.platform.BEANS;
import org.eclipse.scout.rt.platform.BeanMetaData;
@@ -2321,6 +2322,19 @@
return testPoJo;
}
+ @Test
+ public void testSerialize_TestWithoutTypeDo() throws Exception {
+ TestWithoutTypeDo testWithoutTypeDoNested = BEANS.get(TestWithoutTypeDo.class);
+ testWithoutTypeDoNested.withId("5678");
+ TestWithoutTypeDo testWithoutTypeDo = BEANS.get(TestWithoutTypeDo.class);
+ testWithoutTypeDo
+ .withId("1234")
+ .withNested(testWithoutTypeDoNested);
+
+ String json = s_dataObjectMapper.writeValueAsString(testWithoutTypeDo);
+ assertJsonEquals("TestWithoutTypeDo.json", json);
+ }
+
protected TestItemDo createTestItemDo(String id, String attribute) {
return BEANS.get(TestItemDo.class).withId(id).withStringAttribute(attribute);
}
diff --git a/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/fixture/TestWithoutTypeDo.java b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/fixture/TestWithoutTypeDo.java
new file mode 100644
index 0000000..effc7e4
--- /dev/null
+++ b/org.eclipse.scout.rt.jackson.test/src/test/java/org/eclipse/scout/rt/jackson/dataobject/fixture/TestWithoutTypeDo.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2020 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.scout.rt.jackson.dataobject.fixture;
+
+import javax.annotation.Generated;
+
+import org.eclipse.scout.rt.dataobject.DoEntity;
+import org.eclipse.scout.rt.dataobject.DoValue;
+
+public class TestWithoutTypeDo extends DoEntity {
+
+ public DoValue<String> id() {
+ return doValue("id");
+ }
+
+ public DoValue<TestWithoutTypeDo> nested() {
+ return doValue("nested");
+ }
+
+ /* **************************************************************************
+ * GENERATED CONVENIENCE METHODS
+ * *************************************************************************/
+
+ @Generated("DoConvenienceMethodsGenerator")
+ public TestWithoutTypeDo withId(String id) {
+ id().set(id);
+ return this;
+ }
+
+ @Generated("DoConvenienceMethodsGenerator")
+ public String getId() {
+ return id().get();
+ }
+
+ @Generated("DoConvenienceMethodsGenerator")
+ public TestWithoutTypeDo withNested(TestWithoutTypeDo nested) {
+ nested().set(nested);
+ return this;
+ }
+
+ @Generated("DoConvenienceMethodsGenerator")
+ public TestWithoutTypeDo getNested() {
+ return nested().get();
+ }
+}
diff --git a/org.eclipse.scout.rt.jackson.test/src/test/resources/org/eclipse/scout/rt/jackson/dataobject/TestWithoutTypeDo.json b/org.eclipse.scout.rt.jackson.test/src/test/resources/org/eclipse/scout/rt/jackson/dataobject/TestWithoutTypeDo.json
new file mode 100644
index 0000000..5fa56ad
--- /dev/null
+++ b/org.eclipse.scout.rt.jackson.test/src/test/resources/org/eclipse/scout/rt/jackson/dataobject/TestWithoutTypeDo.json
@@ -0,0 +1,6 @@
+{
+ "id" : "1234",
+ "nested" : {
+ "id" : "5678"
+ }
+}
diff --git a/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java b/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java
index d7275e1..616aa88 100644
--- a/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java
+++ b/org.eclipse.scout.rt.jackson/src/main/java/org/eclipse/scout/rt/jackson/dataobject/DataObjectAnnotationIntrospector.java
@@ -10,6 +10,8 @@
*/
package org.eclipse.scout.rt.jackson.dataobject;
+import org.eclipse.scout.rt.dataobject.DataObjectInventory;
+import org.eclipse.scout.rt.dataobject.DoEntity;
import org.eclipse.scout.rt.dataobject.IDoEntity;
import org.eclipse.scout.rt.platform.BEANS;
import org.eclipse.scout.rt.platform.Bean;
@@ -21,6 +23,7 @@
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
+import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
/**
* Jackson {@link AnnotationIntrospector} implementation adding type resolver for all {@link IDoEntity} data object
@@ -40,6 +43,9 @@
@Override
public TypeResolverBuilder<?> findTypeResolver(MapperConfig<?> config, AnnotatedClass ac, JavaType baseType) {
+ if (!(ac.getRawType() == DoEntity.class) && !(ac.getRawType() == IDoEntity.class) && !BEANS.get(DataObjectInventory.class).hasTypeName(ac.getRawType())) {
+ return StdTypeResolverBuilder.noTypeInfoBuilder();
+ }
if (IDoEntity.class.isAssignableFrom(ac.getRawType())) {
DataObjectTypeResolverBuilder doTypeResolverBuilder = BEANS.get(DataObjectTypeResolverBuilder.class);
doTypeResolverBuilder.init(JsonTypeInfo.Id.NAME, BEANS.get(DataObjectTypeIdResolver.class));