Skip to content

Commit 4cdcffe

Browse files
authored
[java] respect the last flag for binary data (#11108)
respect the last flag for binary data Respect the last flag for binary data to ensure the listener will get a complete message and not only a partial message. Co-authored-by: Diego Molina <[email protected]> [skip ci]
1 parent f777911 commit 4cdcffe

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

java/src/org/openqa/selenium/remote/http/jdk/JdkHttpClient.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,8 @@
3333
import org.openqa.selenium.remote.http.TextMessage;
3434
import org.openqa.selenium.remote.http.WebSocket;
3535

36-
import java.io.ByteArrayInputStream;
36+
import java.io.ByteArrayOutputStream;
3737
import java.io.IOException;
38-
import java.io.InputStream;
3938
import java.io.UncheckedIOException;
4039
import java.net.Authenticator;
4140
import java.net.PasswordAuthentication;
@@ -127,6 +126,7 @@ public WebSocket openSocket(HttpRequest request, WebSocket.Listener listener) {
127126
uri,
128127
new java.net.http.WebSocket.Listener() {
129128
final StringBuilder builder = new StringBuilder();
129+
final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
130130

131131
@Override
132132
public CompletionStage<?> onText(java.net.http.WebSocket webSocket, CharSequence data, boolean last) {
@@ -145,11 +145,21 @@ public CompletionStage<?> onText(java.net.http.WebSocket webSocket, CharSequence
145145

146146
@Override
147147
public CompletionStage<?> onBinary(java.net.http.WebSocket webSocket, ByteBuffer data, boolean last) {
148-
LOG.fine("Binary data received.");
149-
byte[] ary = new byte[data.remaining()];
150-
data.get(ary, 0, ary.length);
148+
LOG.fine("Binary data received. Appending data");
149+
byte[] ary = new byte[8192];
151150

152-
listener.onBinary(ary);
151+
while (data.hasRemaining()) {
152+
int n = Math.min(ary.length, data.remaining());
153+
data.get(ary, 0, n);
154+
buffer.write(ary, 0, n);
155+
}
156+
157+
if (last) {
158+
LOG.fine("Final part of binary data received. Calling listener with "
159+
+ buffer.size() + " bytes of data");
160+
listener.onBinary(buffer.toByteArray());
161+
buffer.reset();
162+
}
153163
webSocket.request(1);
154164
return null;
155165
}

0 commit comments

Comments
 (0)