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();
}