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:04 UTC

[sling-org-apache-sling-models-jacksonexporter] branch feature/SLING-10997-request-mixin-interfaces created (now 3db004b)

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

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


      at 3db004b  SLING-10997 convert mixins from abstract classes to interfaces - they fulfill the same purpose for ObjectMapper

This branch includes the following new commits:

     new 3db004b  SLING-10997 convert mixins from abstract classes to interfaces - they fulfill the same purpose for ObjectMapper

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


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

Posted by ss...@apache.org.
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();
 
 }