This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 77e6dae REST refactoring.
77e6dae is described below
commit 77e6dae564c7b750fb112dd217d1c0271514c882
Author: JamesBognar <[email protected]>
AuthorDate: Tue Feb 9 12:52:48 2021 -0500
REST refactoring.
---
.../java/org/apache/juneau/rest/RestResponse.java | 55 ++++++++--------------
.../juneau/rest/logging/BasicRestLogger.java | 2 +-
.../juneau/rest/reshandlers/DefaultHandler.java | 2 +-
.../rest/annotation/Restx_Serializers_Test.java | 6 +--
4 files changed, 25 insertions(+), 40 deletions(-)
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index f96fe8b..febc7a4 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -61,23 +61,25 @@ public final class RestResponse extends
HttpServletResponseWrapper {
private HttpServletResponse inner;
private final RestRequest request;
- private RestOperationContext opContext;
+
private Object output; // The POJO being sent to
the output.
private boolean isNullOutput; // The output is null (as
opposed to not being set at all)
private ServletOutputStream sos;
private FinishableServletOutputStream os;
private FinishablePrintWriter w;
-
private ResponseBeanMeta responseMeta;
/**
* Constructor.
*/
- RestResponse(RestCall call, RestOperationContext roc) throws Exception {
+ RestResponse(RestCall call, RestOperationContext opContext) throws
Exception {
super(call.getResponse());
- this.inner = call.getResponse();
- this.request = call.getRestRequest();
call.restResponse(this);
+
+ inner = call.getResponse();
+ request = call.getRestRequest();
+ responseMeta = opContext.getResponseMeta();
+
RestContext context = call.getContext();
try {
@@ -92,17 +94,15 @@ public final class RestResponse extends
HttpServletResponseWrapper {
throw new BadRequest(e1, "Invalid format for header
'x-response-headers'. Must be in URL-encoded format.");
}
- this.opContext = roc;
-
// Find acceptable charset
String h = request.getHeader("accept-charset");
String charset = null;
if (h == null)
- charset = roc.getDefaultCharset();
+ charset = opContext.getDefaultCharset();
else for (StringRange r : StringRanges.of(h).getRanges()) {
if (r.getQValue() > 0) {
if (r.getName().equals("*"))
- charset = roc.getDefaultCharset();
+ charset = opContext.getDefaultCharset();
else if (Charset.isSupported(r.getName()))
charset = r.getName();
if (charset != null)
@@ -112,46 +112,31 @@ public final class RestResponse extends
HttpServletResponseWrapper {
for (Header e :
request.getContext().getDefaultResponseHeaders())
setHeaderSafe(e.getName(), stringify(e.getValue()));
- for (Header e : roc.getDefaultResponseHeaders())
+ for (Header e : opContext.getDefaultResponseHeaders())
setHeaderSafe(e.getName(), stringify(e.getValue()));
if (charset == null)
throw new NotAcceptable("No supported charsets in
header ''Accept-Charset'': ''{0}''", request.getHeader("Accept-Charset"));
super.setCharacterEncoding(charset);
- this.responseMeta = roc.getResponseMeta();
- }
-
- /**
- * Gets the serializer group for the response.
- *
- * <ul class='seealso'>
- * <li class='link'>{@doc RestSerializers}
- * </ul>
- *
- * @return The serializer group for the response.
- */
- public SerializerGroup getSerializers() {
- return opContext == null ? SerializerGroup.EMPTY :
opContext.getSerializers();
}
/**
- * Returns the media types that are valid for <c>Accept</c> headers on
the request.
+ * Returns access to the inner {@link RestContext} of the class of this
method.
*
- * @return The set of media types registered in the parser group of
this request.
+ * @return The {@link RestContext} of this class. Never <jk>null</jk>.
*/
- public List<MediaType> getSupportedMediaTypes() {
- return opContext == null ? Collections.<MediaType>emptyList() :
opContext.getSupportedAcceptTypes();
+ public RestContext getContext() {
+ return request.getContext();
}
/**
- * Returns the codings that are valid for <c>Accept-Encoding</c> and
<c>Content-Encoding</c> headers on
- * the request.
+ * Returns access to the inner {@link RestOperationContext} of this
method.
*
- * @return The set of media types registered in the parser group of
this request.
+ * @return The {@link RestOperationContext} of this method. Never
<jk>null</jk>.
*/
- public List<String> getSupportedEncodings() {
- return opContext == null ? Collections.<String>emptyList() :
opContext.getEncoders().getSupportedEncodings();
+ public RestOperationContext getOpContext() {
+ return request.getOpContext();
}
/**
@@ -277,7 +262,7 @@ public final class RestResponse extends
HttpServletResponseWrapper {
public FinishableServletOutputStream getNegotiatedOutputStream() throws
NotAcceptable, IOException {
if (os == null) {
Encoder encoder = null;
- EncoderGroup encoders = opContext == null ?
EncoderGroup.DEFAULT : opContext.getEncoders();
+ EncoderGroup encoders =
request.getOpContext().getEncoders();
String ae = request.getHeader("Accept-Encoding");
if (! (ae == null || ae.isEmpty())) {
@@ -668,7 +653,7 @@ public final class RestResponse extends
HttpServletResponseWrapper {
*
* @return The wrapped servlet request.
*/
- public HttpServletResponse getInner() {
+ public HttpServletResponse getHttpServletResponse() {
return inner;
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
index aef1a57..3a72bfd 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/logging/BasicRestLogger.java
@@ -344,7 +344,7 @@ public class BasicRestLogger implements RestLogger {
private byte[] getResponseBody(HttpServletRequest req,
HttpServletResponse res) {
if (res instanceof RestResponse)
- res = ((RestResponse)res).getInner();
+ res = ((RestResponse)res).getHttpServletResponse();
if (res instanceof CachingHttpServletResponse)
return ((CachingHttpServletResponse)res).getBody();
return castOrNull(req.getAttribute("ResponseBody"),
byte[].class);
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
index 4c20e8f..b59d320 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/reshandlers/DefaultHandler.java
@@ -54,7 +54,7 @@ public class DefaultHandler implements ResponseHandler {
@SuppressWarnings("resource")
@Override /* ResponseHandler */
public boolean handle(RestRequest req, RestResponse res) throws
IOException, InternalServerError, NotAcceptable {
- SerializerGroup g = res.getSerializers();
+ SerializerGroup g = res.getOpContext().getSerializers();
String accept = req.getHeaders().getString("Accept", "*/*");
SerializerMatch sm = g.getSerializerMatch(accept);
HttpPartSchema schema = null;
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_Serializers_Test.java
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_Serializers_Test.java
index b349d15..34631da 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_Serializers_Test.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Restx_Serializers_Test.java
@@ -202,17 +202,17 @@ public class Restx_Serializers_Test {
@RestOp
public OList a(RestResponse res) {
// Should show ['text/s3','text/s4','text/s1','text/s2']
- return OList.of(res.getSupportedMediaTypes());
+ return
OList.of(res.getOpContext().getSupportedAcceptTypes());
}
@RestOp(serializers=S5.class)
public OList b(RestResponse res) {
// Should show ['text/s5']
- return OList.of(res.getSupportedMediaTypes());
+ return
OList.of(res.getOpContext().getSupportedAcceptTypes());
}
@RestOp(serializers={S5.class,Inherit.class})
public OList c(RestResponse res) {
// Should show
['text/s5','text/s3','text/s4','text/s1','text/s2']
- return OList.of(res.getSupportedMediaTypes());
+ return
OList.of(res.getOpContext().getSupportedAcceptTypes());
}
}