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[]复制到本地之后,反序列化是可以成功的,可能是什么原因?
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
If not, please provide reproduction code in this issue, we can't trouble shooting without reproduction code
This is fixed in fury 0.8.0