Skip to content

Commit 1bb2c28

Browse files
authored
Fix NoSuchMethodError CharBuffer.flip() on Java 8 (#313)
1 parent 0eac739 commit 1bb2c28

File tree

1 file changed

+7
-5
lines changed
  • apm-agent-core/src/main/java/co/elastic/apm/util

1 file changed

+7
-5
lines changed

apm-agent-core/src/main/java/co/elastic/apm/util/IOUtils.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import java.io.IOException;
2525
import java.io.InputStream;
26+
import java.nio.Buffer;
2627
import java.nio.ByteBuffer;
2728
import java.nio.CharBuffer;
2829
import java.nio.charset.CharsetDecoder;
@@ -61,17 +62,18 @@ protected CharsetDecoder initialValue() {
6162
*/
6263
@VisibleForAdvice
6364
public static boolean readUtf8Stream(final InputStream is, final CharBuffer charBuffer) throws IOException {
65+
// to be compatible with Java 8, we have to cast to buffer because of different return types
6466
final ByteBuffer buffer = threadLocalByteBuffer.get();
6567
final CharsetDecoder charsetDecoder = threadLocalCharsetDecoder.get();
6668
try {
6769
final byte[] bufferArray = buffer.array();
6870
for (int read = is.read(bufferArray); read != -1; read = is.read(bufferArray)) {
69-
buffer.limit(read);
71+
((Buffer) buffer).limit(read);
7072
final CoderResult coderResult = charsetDecoder.decode(buffer, charBuffer, true);
71-
buffer.clear();
73+
((Buffer) buffer).clear();
7274
if (coderResult.isError()) {
7375
// this is not UTF-8
74-
charBuffer.clear();
76+
((Buffer) charBuffer).clear();
7577
return false;
7678
} else if (coderResult.isOverflow()) {
7779
// stream yields more chars than the charBuffer can hold
@@ -81,8 +83,8 @@ public static boolean readUtf8Stream(final InputStream is, final CharBuffer char
8183
charsetDecoder.flush(charBuffer);
8284
return true;
8385
} finally {
84-
charBuffer.flip();
85-
buffer.clear();
86+
((Buffer) charBuffer).flip();
87+
((Buffer) buffer).clear();
8688
charsetDecoder.reset();
8789
is.close();
8890
}

0 commit comments

Comments
 (0)