You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2021/12/14 11:37:05 UTC

[sling-org-apache-sling-models-jacksonexporter] 01/01: SLING-10997 convert mixins from abstract classes to interfaces - they fulfill the same purpose for ObjectMapper

This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch feature/SLING-10997-request-mixin-interfaces
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-models-jacksonexporter.git

commit 3db004b792c346b4610ebec7f52e63d59d358642
Author: Stefan Seifert <st...@users.noreply.github.com>
AuthorDate: Tue Dec 14 12:36:40 2021 +0100

    SLING-10997 convert mixins from abstract classes to interfaces - they fulfill the same purpose for ObjectMapper
---
 .../impl/HttpServletRequestMixin.java              | 42 ++++++++++++----------
 .../jacksonexporter/impl/ServletRequestMixin.java  | 38 +++++++++++---------
 .../impl/SlingHttpServletRequestMixin.java         | 14 +++++---
 3 files changed, 53 insertions(+), 41 deletions(-)

diff --git a/src/main/java/org/apache/sling/models/jacksonexporter/impl/HttpServletRequestMixin.java b/src/main/java/org/apache/sling/models/jacksonexporter/impl/HttpServletRequestMixin.java
index 78771b2..d161453 100644
--- a/src/main/java/org/apache/sling/models/jacksonexporter/impl/HttpServletRequestMixin.java
+++ b/src/main/java/org/apache/sling/models/jacksonexporter/impl/HttpServletRequestMixin.java
@@ -25,78 +25,82 @@ import javax.servlet.http.HttpServletRequest;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonGetter;
 
+/**
+ * This "mixin" interface instructs the Jackson ObjectMapper what properties should be included in JSON view of a HttpServletRequest object.
+ * Without it, the auto-detection may lead to unexpected results, e.g. StackOverflow errors.
+ */
 @JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE)
-public abstract class HttpServletRequestMixin extends ServletRequestMixin implements HttpServletRequest {
+public interface HttpServletRequestMixin extends ServletRequestMixin, HttpServletRequest {
 
     @JsonGetter
     @Override
-    public abstract String getAuthType();
+    public String getAuthType();
 
     @JsonGetter
     @Override
-    public abstract Cookie[] getCookies();
+    public Cookie[] getCookies();
 
     @JsonGetter
     @Override
-    public abstract String getMethod();
+    public String getMethod();
 
     @JsonGetter
     @Override
-    public abstract String getPathInfo();
+    public String getPathInfo();
 
     @JsonGetter
     @Override
-    public abstract String getPathTranslated();
+    public String getPathTranslated();
 
     @JsonGetter
     @Override
-    public abstract String getContextPath();
+    public String getContextPath();
 
     @JsonGetter
     @Override
-    public abstract String getQueryString();
+    public String getQueryString();
 
     @JsonGetter
     @Override
-    public abstract  String getRemoteUser();
+    public  String getRemoteUser();
 
     @JsonGetter
     @Override
-    public abstract String getRemoteHost();
+    public String getRemoteHost();
 
     @JsonGetter
     @Override
-    public abstract Principal getUserPrincipal();
+    public Principal getUserPrincipal();
 
     @JsonGetter
     @Override
-    public abstract String getRequestedSessionId();
+    public String getRequestedSessionId();
 
     @JsonGetter
     @Override
-    public abstract String getRequestURI();
+    public String getRequestURI();
 
     @JsonGetter
     @Override
-    public abstract boolean isRequestedSessionIdFromCookie();
+    public boolean isRequestedSessionIdFromCookie();
 
     @JsonGetter
     @Override
-    public abstract boolean isRequestedSessionIdFromURL();
+    public boolean isRequestedSessionIdFromURL();
 
     @JsonGetter
     @Override
-    public abstract boolean isRequestedSessionIdValid();
+    public boolean isRequestedSessionIdValid();
 
     @JsonGetter
     @Override
-    public abstract boolean isRequestedSessionIdFromUrl();
+    public boolean isRequestedSessionIdFromUrl();
 
     @JsonGetter
     @Override
-    public abstract Enumeration<String> getHeaderNames();
+    public Enumeration<String> getHeaderNames();
 
     @JsonGetter
     @Override
-    public abstract String getServletPath();
+    public String getServletPath();
 }
diff --git a/src/main/java/org/apache/sling/models/jacksonexporter/impl/ServletRequestMixin.java b/src/main/java/org/apache/sling/models/jacksonexporter/impl/ServletRequestMixin.java
index a0cdbe0..ac839ec 100644
--- a/src/main/java/org/apache/sling/models/jacksonexporter/impl/ServletRequestMixin.java
+++ b/src/main/java/org/apache/sling/models/jacksonexporter/impl/ServletRequestMixin.java
@@ -25,63 +25,67 @@ import javax.servlet.ServletRequest;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonGetter;
 
+/**
+ * This "mixin" interface instructs the Jackson ObjectMapper what properties should be included in JSON view of a ServletRequest object.
+ * Without it, the auto-detection may lead to unexpected results, e.g. StackOverflow errors.
+ */
 @JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE)
-public abstract class ServletRequestMixin implements ServletRequest {
+public interface ServletRequestMixin extends ServletRequest {
 
     @JsonGetter("parameters")
     @Override
-    public abstract Map<String,String[]> getParameterMap();
+    public Map<String,String[]> getParameterMap();
 
     @JsonGetter
     @Override
-    public abstract Locale getLocale();
+    public Locale getLocale();
 
     @JsonGetter
     @Override
-    public abstract String getContentType();
+    public String getContentType();
 
     @JsonGetter
     @Override
-    public abstract int getContentLength();
+    public int getContentLength();
 
     @JsonGetter
     @Override
-    public abstract int getRemotePort();
+    public int getRemotePort();
 
     @JsonGetter
     @Override
-    public abstract String getRemoteAddr();
+    public String getRemoteAddr();
 
     @JsonGetter
     @Override
-    public abstract int getServerPort();
+    public int getServerPort();
 
     @JsonGetter
     @Override
-    public abstract String getServerName();
+    public String getServerName();
 
     @JsonGetter
     @Override
-    public abstract boolean isSecure();
+    public boolean isSecure();
 
     @Override
-    public abstract Enumeration<Locale> getLocales();
+    public Enumeration<Locale> getLocales();
 
     @Override
-    public abstract String getCharacterEncoding();
+    public String getCharacterEncoding();
 
     @Override
-    public abstract int getLocalPort();
+    public int getLocalPort();
 
     @Override
-    public abstract String getLocalAddr();
+    public String getLocalAddr();
 
     @Override
-    public abstract String getLocalName();
+    public String getLocalName();
 
     @Override
-    public abstract String getProtocol();
+    public String getProtocol();
 
     @Override
-    public abstract String getScheme();
+    public String getScheme();
 }
diff --git a/src/main/java/org/apache/sling/models/jacksonexporter/impl/SlingHttpServletRequestMixin.java b/src/main/java/org/apache/sling/models/jacksonexporter/impl/SlingHttpServletRequestMixin.java
index 8535943..670ff0b 100644
--- a/src/main/java/org/apache/sling/models/jacksonexporter/impl/SlingHttpServletRequestMixin.java
+++ b/src/main/java/org/apache/sling/models/jacksonexporter/impl/SlingHttpServletRequestMixin.java
@@ -25,23 +25,27 @@ import org.apache.sling.api.resource.Resource;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonGetter;
 
+/**
+ * This "mixin" interface instructs the Jackson ObjectMapper what properties should be included in JSON view of a SlingHttpServletRequest object.
+ * Without it, the auto-detection may lead to unexpected results, e.g. StackOverflow errors.
+ */
 @JsonAutoDetect(getterVisibility = JsonAutoDetect.Visibility.NONE, fieldVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE)
-public abstract class SlingHttpServletRequestMixin extends HttpServletRequestMixin implements SlingHttpServletRequest {
+public interface SlingHttpServletRequestMixin extends HttpServletRequestMixin, SlingHttpServletRequest {
 
     @JsonGetter
     @Override
-    public abstract Resource getResource();
+    public Resource getResource();
 
     @JsonGetter
     @Override
-    public abstract RequestPathInfo getRequestPathInfo();
+    public RequestPathInfo getRequestPathInfo();
 
     @JsonGetter
     @Override
-    public abstract String getResponseContentType();
+    public String getResponseContentType();
 
     @JsonGetter()
     @Override
-    public abstract Enumeration<String> getResponseContentTypes();
+    public Enumeration<String> getResponseContentTypes();
 
 }