fury icon indicating copy to clipboard operation
fury copied to clipboard

[Question] java.lang.LinkageError: bad method type alias: (Fury,Class)void not visible from class

Open deadpoolssr opened this issue 1 year ago • 2 comments

Question

线上代码

ThreadSafeFury fury = Fury.builder().withLanguage(Language.JAVA) .requireClassRegistration(false) .withCompatibleMode(CompatibleMode.COMPATIBLE) .withClassLoader(classLoader) .buildThreadSafeFury();

fury.setClassLoader(classLoader, LoaderBinding.StagingType.SOFT_STAGING); return fury.deserialize(bytes);

报错堆栈 java.lang.IllegalAccessException: no such constructor: com.alibaba.alsc.chameleon.api.model.region.ChameleonCardFuryCompatibleCodec_1_1116884706_299406744.(Fury,Class)void/invokeSpecial at java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:959) at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1101) at java.base/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:2030) at java.base/java.lang.invoke.MethodHandles$Lookup.findConstructor(MethodHandles.java:1264) at org.apache.fury.serializer.Serializers.createSerializer(Serializers.java:126) at org.apache.fury.serializer.Serializers.newSerializer(Serializers.java:103) at org.apache.fury.resolver.ClassResolver.createSerializer(ClassResolver.java:1179) at org.apache.fury.resolver.ClassResolver.getClassInfo(ClassResolver.java:1072) at org.apache.fury.resolver.ClassResolver.readClassInfoFromBytes(ClassResolver.java:1634) at org.apache.fury.resolver.ClassResolver.readClassInfoFromBytes(ClassResolver.java:1607) at org.apache.fury.resolver.ClassResolver.readClassInfo(ClassResolver.java:1588) at org.apache.fury.serializer.collection.AbstractCollectionSerializer.generalJavaRead(AbstractCollectionSerializer.java:617) at org.apache.fury.serializer.collection.AbstractCollectionSerializer.readElements(AbstractCollectionSerializer.java:545) at org.apache.fury.serializer.collection.CollectionSerializer.read(CollectionSerializer.java:53) at org.apache.fury.serializer.collection.CollectionSerializer.read(CollectionSerializer.java:27) at org.apache.fury.Fury.readDataInternal(Fury.java:923) at org.apache.fury.Fury.readRef(Fury.java:838) at org.apache.fury.serializer.collection.AbstractMapSerializer.generalJavaRead(AbstractMapSerializer.java:569) at org.apache.fury.serializer.collection.AbstractMapSerializer.genericJavaRead(AbstractMapSerializer.java:443) at org.apache.fury.serializer.collection.AbstractMapSerializer.readElements(AbstractMapSerializer.java:435) at org.apache.fury.serializer.collection.MapSerializer.read(MapSerializer.java:46) at org.apache.fury.serializer.collection.MapSerializer.read(MapSerializer.java:27) at org.apache.fury.Fury.readDataInternal(Fury.java:923) at org.apache.fury.Fury.readRef(Fury.java:825) at org.apache.fury.Fury.deserialize(Fury.java:760) at org.apache.fury.Fury.deserialize(Fury.java:682) at org.apache.fury.ThreadLocalFury.deserialize(ThreadLocalFury.java:130) at com.alibaba.kondyle.service.contrib.solution.impl.protocol.FuryProtocol.deserializeResponseInner(FuryProtocol.java:40) at com.alibaba.kondyle.service.contrib.solution.impl.protocol.AbstractProtocol$DeserializeFunction.apply(AbstractProtocol.java:42) at com.alibaba.kondyle.service.contrib.solution.impl.protocol.AbstractProtocol$DeserializeFunction.apply(AbstractProtocol.java:34) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:642) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) at com.alibaba.kondyle.concurrent.future.MonitorCompletableFuture.complete(MonitorCompletableFuture.java:105) at com.alibaba.glaucus.concurrent.SolutionInvokerGrpcImpl$RpcFinishCallback.accept(SolutionInvokerGrpcImpl.java:865) at com.alibaba.glaucus.concurrent.SolutionInvokerGrpcImpl$RpcFinishCallback.accept(SolutionInvokerGrpcImpl.java:828) at com.alibaba.glaucus.concurrent.SolutionInvokerGrpcImpl.lambda$invokeAsyncInnerSpan$43(SolutionInvokerGrpcImpl.java:395) at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930) at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) at com.alibaba.glaucus.concurrent.SolutionInvokeGrpcCallback.onResponse(SolutionInvokeGrpcCallback.java:42) at com.alibaba.kondyle.mesh.grpc.GrpcConsumer$2.handleNormal(GrpcConsumer.java:262) at com.alibaba.kondyle.mesh.grpc.client.ResultConsumer.accept(ResultConsumer.java:27) at com.alibaba.kondyle.mesh.grpc.processor.client.RevealProcessor$RevealProcessorListener.handleNormal(RevealProcessor.java:85) at com.alibaba.kondyle.mesh.grpc.client.ResultConsumer.accept(ResultConsumer.java:27) at com.alibaba.kondyle.mesh.grpc.processor.client.MulticastProcessor$MultiCastListener.handleNormal(MulticastProcessor.java:124) at com.alibaba.kondyle.mesh.grpc.client.ResultConsumer.accept(ResultConsumer.java:27) at com.alibaba.kondyle.mesh.grpc.processor.client.TailOutboundProcessor$1.onCompleted(TailOutboundProcessor.java:87) at com.alibaba.kondyle.mesh.grpc.processor.client.TailOutboundProcessor$1.onCompleted(TailOutboundProcessor.java:54) at com.alibaba.glaucus.rpc.RpcClientServiceImpl$GlaucusStreamObserver.onResponseInner(RpcClientServiceImpl.java:394) at com.alibaba.glaucus.rpc.RpcClientServiceImpl$GlaucusStreamObserver.onNext(RpcClientServiceImpl.java:359) at com.alibaba.glaucus.rpc.RpcClientServiceImpl$GlaucusStreamObserver.onNext(RpcClientServiceImpl.java:330) at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onMessage(ClientCalls.java:440) at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33) at com.alibaba.tpp.rpc.client.MeshClientInterceptor$1$1.onMessage(MeshClientInterceptor.java:168) at io.grpc.ForwardingClientCallListener.onMessage(ForwardingClientCallListener.java:33) at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:658) at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:643) at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:991) at java.base/com.alibaba.wisp.engine.WispTask.runOutsideWisp(WispTask.java:308) at java.base/com.alibaba.wisp.engine.WispTask.runCommand(WispTask.java:297) at java.base/com.alibaba.wisp.engine.WispTask$CacheableCoroutine.run(WispTask.java:269) at java.base/java.dyn.CoroutineBase.startInternal(CoroutineBase.java:74) Caused by: java.lang.LinkageError: bad method type alias: (Fury,Class)void not visible from class com.alibaba.alsc.chameleon.api.model.region.ChameleonCardFuryCompatibleCodec_1_1116884706_299406744 at java.base/java.lang.invoke.MemberName.checkForTypeAlias(MemberName.java:872) at java.base/java.lang.invoke.MemberName$Factory.resolve(MemberName.java:1074) at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1098) ... 66 more

但把这个byte[]复制到本地之后,反序列化是可以成功的,可能是什么原因?

deadpoolssr avatar Sep 12 '24 02:09 deadpoolssr

Seems it's a classloader issue in your project instead of Fury issue. Maybe you included two Fury jars in different classloaders, so it throws java.lang.LinkageError: bad method type alias: (Fury,Class)void not visible from class

chaokunyang avatar Sep 13 '24 06:09 chaokunyang

If not, please provide reproduction code in this issue, we can't trouble shooting without reproduction code

chaokunyang avatar Sep 13 '24 06:09 chaokunyang

This is fixed in fury 0.8.0

chaokunyang avatar Oct 04 '24 06:10 chaokunyang