diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/JacksonProvider.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/JacksonProvider.java
new file mode 100644
index 0000000..51b616a
--- /dev/null
+++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/JacksonProvider.java
@@ -0,0 +1,12 @@
+package org.gcube.application.cms.plugins;
+
+import org.gcube.application.geoportal.common.JSONSerializationProvider;
+
+public class JacksonProvider implements JSONSerializationProvider {
+
+
+ @Override
+ public void setJSONWrapperDefaults() {
+
+ }
+}
diff --git a/geoportal-common/pom.xml b/geoportal-common/pom.xml
index d7600e4..4c429e6 100644
--- a/geoportal-common/pom.xml
+++ b/geoportal-common/pom.xml
@@ -54,6 +54,22 @@
compile
+
+
+ org.gcube.contentmanagement
+ storage-manager-core
+
+
+
+ org.gcube.contentmanagement
+ storage-manager-wrapper
+
+
+ org.reflections
+ reflections
+
+
+
junit
@@ -72,18 +88,9 @@
org.glassfish.jersey.media
jersey-media-json-jackson
-
-
- org.gcube.contentmanagement
- storage-manager-core
-
-
-
- org.gcube.contentmanagement
- storage-manager-wrapper
-
-
+
+
\ No newline at end of file
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/JSONSerializationProvider.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/JSONSerializationProvider.java
new file mode 100644
index 0000000..2b7b619
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/JSONSerializationProvider.java
@@ -0,0 +1,7 @@
+package org.gcube.application.geoportal.common;
+
+public interface JSONSerializationProvider {
+
+ public void setJSONWrapperDefaults();
+
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
index 4e75137..d7295fe 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
@@ -7,33 +7,37 @@ import com.jayway.jsonpath.spi.json.JsonProvider;
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
import com.jayway.jsonpath.spi.mapper.MappingProvider;
import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.gcube.application.geoportal.common.JSONSerializationProvider;
+import org.reflections.Reflections;
+import org.reflections.util.ConfigurationBuilder;
+import org.reflections.util.FilterBuilder;
import java.util.*;
+@Slf4j
public class JSONPathWrapper {
public static Configuration JSON_PATH_ALWAYS_LIST_CONFIG=null;
public static Configuration JSON_PATH_PATHS_CONFIGURATION=null;
static {
- Configuration.setDefaults(new Configuration.Defaults() {
- private JsonProvider jacksonProvider = new JacksonJsonProvider();
+ Reflections reflections = new Reflections(
+ new ConfigurationBuilder()
+ .forPackage("org.gcube.application")
+ .filterInputsBy(new FilterBuilder().includePackage("org.gcube.application")));
- private final MappingProvider mappingProvider = new JacksonMappingProvider();
- @Override
- public JsonProvider jsonProvider() {
- return jacksonProvider;
+ reflections.getSubTypesOf(JSONSerializationProvider.class).iterator().forEachRemaining(providerClass->{
+ if(!providerClass.isInterface()){
+ try {
+ log.warn("Loading JSON Provider {} ",providerClass);
+ JSONSerializationProvider provider = providerClass.newInstance();
+ provider.setJSONWrapperDefaults();
+ }catch (Throwable t){
+ log.error("Unable to instantiate provider "+providerClass,t);
+ }
}
- @Override
- public Set