GeezerVison is showing github.com — Android: No virtual method position(I)Ljava/nio/ByteBuffer · Issue #516 · msgpack/msgpack-java
Android: No virtual method position(I)Ljava/nio/ByteBuffer #516DescriptionSince version 0.8.19, our Android CI (using Android 5 and 6 devices) started failing on a msgpack test. Here's a simplified reproducer:
@RunWith(AndroidJUnit4.class)
@SmallTest
public class MsgpackTest {
@Test
public void testPutString() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
MessagePacker packer = MessagePack.newDefaultPacker(out);
packer.packString("hello android");
}
}
The error message:
java.lang.NoSuchMethodError: No virtual method position(I)Ljava/nio/ByteBuffer; in class Ljava/nio/ByteBuffer; or its super classes (declaration of 'java.nio.ByteBuffer' appears in /system/framework/core-libart.jar)
at org.msgpack.core.buffer.MessageBufferU.resetBufferPosition(MessageBufferU.java:70)
at org.msgpack.core.buffer.MessageBufferU.putBytes(MessageBufferU.java:232)
at org.msgpack.core.MessagePacker.addPayload(MessagePacker.java:1073)
at org.msgpack.core.MessagePacker.addPayload(MessagePacker.java:1043)
at org.msgpack.core.MessagePacker.packStringWithGetBytes(MessagePacker.java:659)
at org.msgpack.core.MessagePacker.packString(MessagePacker.java:732)
...
This is most probably due to the changes in #514 (cc @ppkarwasz). The test succeeds when running with msgpack-core version 0.8.18. Activityppkarwasz commented on Nov 22, 2019 I believe the library must have been compiled against the wrong JRE (i.e. Java's 11 JRE was used instead of Java's 7/8): in Java 8 the classByteBuffer inherits the position method from Bufferand has a return type of java.nio.Buffer. On Java 11 the method is overridden with an implementation that returns java.nio.ByteBuffer.
@dbrgn: can you compile the library from source and check if it still fails the tests? bananaumai commented on Nov 26, 2019 I also faced same issues. I'm using this library for Android Project. As @ppkarwasz said, jvmTarget is configured as 1.8. dbrgn commented on Nov 26, 2019
@dbrgn: can you compile the library from source and check if it still fails the tests?
My local Java version:
$ java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
I compiled the library locally:
Then I added the local maven repo to my gradle file:
repositories {
...
maven { url "/home/<user>/.m2/repository" }
}
...and finally forced msgpack to resolve to the snapshot version:
configurations.all {
resolutionStrategy.force 'org.msgpack:msgpack-core:0.8.20-SNAPSHOT'
}
With that configuration, the test passes, so I think you're right. Maybe you can release a fix? ppkarwasz commented on Nov 26, 2019 @xerial, can you make another release? Version 0.8.19 is almost certainly compiled against JRE 11 and linking problems occur, when using another JRE.
Maybe it is possible to setup Travis CI to run the test against the jar file, so oversights like this don't occur? Reacted by Danilo Bargen, bnn and naresh-jaggumanthri xerial commented on Nov 27, 2019 Got it. Thanks for the investigation.
We can add such an integration test using GitHub Action. First, I'll try to automate the release process to make sure to produce Java8 compatible jar files. xerial commented on Nov 27, 2019 Released 0.8.20 built with jdk8. dbrgn commented on Nov 28, 2019 dbrgn commented on May 15, 2021 @xerial unfortunately this problem is back, the test in the initial post fails again on Android 5 with msgpack-core 0.8.23, but it works fine with 0.8.22. xerial commented on May 17, 2021 @dbrgn Thanks for reporting. We have changed the release process to use GitHub Action, and now it will always use JDK8 for the release. Just release 0.8.24 built with JDK8. dbrgn commented on May 17, 2021
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|