[java-support] 12/21: Plug in response handling, very likely non-functional at this stage.

Scott Cantor cantor.2 at osu.edu
Thu Jun 2 14:38:59 UTC 2022


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch dev/JSPT-111
in repository java-support.

View the commit online:
http://git.shibboleth.net/view/?p=java-support.git;a=commit;h=2aeb44f9f13f4add0d74a7a87a6a9d4aaa569b48

commit 2aeb44f9f13f4add0d74a7a87a6a9d4aaa569b48
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Sep 17 14:09:22 2021 -0400

    Plug in response handling, very likely non-functional at this stage.
---
 .../support/ddf/RemotedHttpServletResponse.java    | 35 ++++++++++++++--------
 1 file changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/main/java/net/shibboleth/utilities/java/support/ddf/RemotedHttpServletResponse.java b/src/main/java/net/shibboleth/utilities/java/support/ddf/RemotedHttpServletResponse.java
index a1e9b9e..d77a04e 100644
--- a/src/main/java/net/shibboleth/utilities/java/support/ddf/RemotedHttpServletResponse.java
+++ b/src/main/java/net/shibboleth/utilities/java/support/ddf/RemotedHttpServletResponse.java
@@ -20,6 +20,7 @@ package net.shibboleth.utilities.java.support.ddf;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.HttpCookie;
+import java.nio.charset.Charset;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
 import java.util.ArrayList;
@@ -51,6 +52,9 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
     /** Underlying object for remoted data. */
     @Nonnull private final DDF obj;
     
+    /** Size of each character buffer for output. */
+    private int bufferSize;
+    
     /** Tracks committing of response. */
     private boolean committed;
     
@@ -64,6 +68,7 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
      */
     public RemotedHttpServletResponse(final DDF ddf) {
         obj = Constraint.isNotNull(ddf, "DDF cannot be null");
+        bufferSize = 1024;
     }
     
     /** {@inheritDoc} */
@@ -90,7 +95,7 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
 
     /** {@inheritDoc} */
     public PrintWriter getWriter() throws IOException {
-        return new PrintWriter(getOutputStream());
+        return new PrintWriter(getOutputStream(), false, Charset.forName(getCharacterEncoding()));
     }
 
     /** {@inheritDoc} */
@@ -115,12 +120,12 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
 
     /** {@inheritDoc} */
     public void setBufferSize(final int size) {
-        throw new UnsupportedOperationException();
+        bufferSize = size;
     }
 
     /** {@inheritDoc} */
     public int getBufferSize() {
-        throw new UnsupportedOperationException();
+        return bufferSize;
     }
 
     /** {@inheritDoc} */
@@ -365,19 +370,25 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
         /** Wrapped array. */
         private final byte[] buffer;
         
-        private ByteArrayWrapper() {
-            buffer = new byte[1024];
+        private ByteArrayWrapper(final int size) {
+            buffer = new byte[size];
             offset = 0;
         }
         
         private boolean write(final int b) {
-            if (offset < 1024) {
+            if (offset < buffer.length) {
                 buffer[offset++] = Integer.valueOf(b).byteValue();
                 return true;
             }
             
             return false;
         }
+        
+        private void flush(@Nonnull final StringBuffer sink) {
+            for (int i = 0; i < offset; i++) {
+                sink.appendCodePoint(buffer[i]);
+            }
+        }
     }
 
     private class BodyOutputStream extends ServletOutputStream {
@@ -391,7 +402,7 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
         
         /** Constructor. */
         public BodyOutputStream() {
-            currentBuffer = new ByteArrayWrapper();
+            currentBuffer = new ByteArrayWrapper(bufferSize);
             bufferList = new ArrayList<>(1);
             bufferList.add(currentBuffer);
         }
@@ -409,7 +420,7 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
         @Override
         public void write(final int b) throws IOException {
             if (!currentBuffer.write(b)) {
-                currentBuffer = new ByteArrayWrapper();
+                currentBuffer = new ByteArrayWrapper(bufferSize);
                 bufferList.add(currentBuffer);
                 Constraint.isTrue(currentBuffer.write(b), "Fresh buffer cannot fail to accept data");
             }
@@ -417,9 +428,9 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
 
         @Override
         public void flush() throws IOException {
-            for (final ByteArrayWrapper buffers : bufferList) {
-                
-            }
+            final StringBuffer sink = new StringBuffer();
+            bufferList.forEach(b -> b.flush(sink));
+            obj.addmember("response.data").unsafe_string(sink.toString());
         }
 
         @Override
@@ -429,7 +440,7 @@ public class RemotedHttpServletResponse implements HttpServletResponse {
 
         /** Clear all data written. */
         private void reset() {
-            currentBuffer = new ByteArrayWrapper();
+            currentBuffer = new ByteArrayWrapper(bufferSize);
             bufferList.clear();
             bufferList.add(currentBuffer);
         }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list