milvus-sdk-java icon indicating copy to clipboard operation
milvus-sdk-java copied to clipboard

Exception in thread "main" java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;

Open onestow opened this issue 1 year ago • 9 comments

My JDK version is 1.8, milvus-sdk-java version is 2.4.0, when I run SearchResultsWrapper.getIDScore, and I got the exception:

Exception in thread "main" java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;
	at io.milvus.response.FieldDataWrapper.getFieldData(FieldDataWrapper.java:248)
	at io.milvus.response.FieldDataWrapper.valueByIdx(FieldDataWrapper.java:351)
	at io.milvus.response.SearchResultsWrapper.getIDScore(SearchResultsWrapper.java:207)
	at com.tom.MilvusTest.myTest(MilvusTest.java:190)
	at com.tom.MilvusTest.main(MilvusTest.java:114)

how to solve it?

onestow avatar Apr 23 '24 09:04 onestow

jdk21 is normal jdk8 is not support?

onestow avatar Apr 24 '24 01:04 onestow

https://www.morling.dev/blog/bytebuffer-and-the-dreaded-nosuchmethoderror/

xiaofan-luan avatar Apr 24 '24 01:04 xiaofan-luan

this is a java compilation bug need to be fixed.

@onestow would you mind fix that?

xiaofan-luan avatar Apr 24 '24 01:04 xiaofan-luan

I'm sorry, but I haven't had time for anything else recently v_v

onestow avatar Apr 25 '24 01:04 onestow

/assign @yhmo could you help on it?

xiaofan-luan avatar Apr 25 '24 01:04 xiaofan-luan

Java SDK is compiled by openjdk 11 with language level 8. Seems this is an issue of ByteBuffer. If it cannot run under jdk 1.8, try use jdk 11 instead. I need to install 1.8 to test the issue first, I am not sure is any quick solution there.

yhmo avatar Apr 25 '24 07:04 yhmo

check the link

... <maven.compiler.release>8</maven.compiler.release> ...

xiaofan-luan avatar Apr 25 '24 09:04 xiaofan-luan

maven.compiler.release doesn't resolve this issue.

I tested on my local.

  • compile sdk with openjdk 1.8 and language level 8 run client with openjdk 1.8 and language level 8, the ByteBuffer works fine run client with openjdk 11 and language level 8, the ByteBuffer works fine

  • compile sdk with openjdk 11 and language level 8 run client with openjdk 1.8 and language level 8, get NoSuchMethod error of ByteBuffer such as rewind()/position() run client with openjdk 11 and language level 8, the ByteBuffer works fine

yhmo avatar Apr 26 '24 10:04 yhmo

A possible solution is: compile the SDK with OpenJDK 1.8 and language level 8 from the next version.

There is a potential problem: seems the tensorflow-core-platform could not work under openjdk 1.8. (Currently, we use this lib for Float16Vector examples).

java: cannot access org.tensorflow.ndarray.buffer.ByteDataBuffer
  bad class file: /home/yhmo/.m2/repository/org/tensorflow/ndarray/0.4.0/ndarray-0.4.0.jar!/org/tensorflow/ndarray/buffer/ByteDataBuffer.class
    class file has wrong version 55.0, should be 52.0
    Please remove or make sure it appears in the correct subdirectory of the classpath.

yhmo avatar Apr 26 '24 10:04 yhmo