[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