Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
only happens when building with Java > 8 and then running with Java 8
Description
See https://github.com/apache/felix/pull/114 .
Java 9 introduces overridden methods with covariant return types for the following methods in java.nio.ByteBuffer:
position(int newPosition)
limit(int newLimit)
flip()
clear()
mark()
reset()
rewind()
In Java 9 they all now return ByteBuffer, whereas the methods they override return Buffer,
resulting in exceptions like this when executing on Java 8 and lower:
java.lang.NoSuchMethodError: java.nio.ByteBuffer.limit(I)Ljava/nio/ByteBuffer
This is because the generated byte code includes the static return type of the method, which is not found on Java 8 and lower because the overloaded methods with covariant return types don't exist (the issue appears even with source and target 8 or lower in compilation parameters).
The solution is to cast ByteBuffer instances to Buffer before calling the method.