fury
fury copied to clipboard
Meta context must be set before serialization, please set meta context by SerializationContext.setMetaContext
Search before asking
- [X] I had searched in the issues and found no similar issues.
Version
java:jdk17 fury:0.5.0
Component(s)
Java
Minimal reproduce step
when use multithread
private static ThreadSafeFury getBuildThreadSafeFury() {
return Fury.builder().withLanguage(Language.JAVA)
.requireClassRegistration(false)
.withRefTracking(false)
.withMetaContextShare(true)
.withIntCompressed(true)
.withLongCompressed(true)
.withStringCompressed(true)
.withCompatibleMode(CompatibleMode.COMPATIBLE)
.withClassLoader(CLASS_LOADER)
.buildThreadSafeFury();
}
fury.serialize(source);
What did you expect to see?
no exception
What did you see instead?
java.lang.NullPointerException: Meta context must be set before serialization, please set meta context by SerializationContext.setMetaContext
at org.apache.fury.util.Preconditions.checkNotNull(Preconditions.java:33)
at org.apache.fury.resolver.ClassResolver.writeClassWithMetaShare(ClassResolver.java:1256)
at org.apache.fury.resolver.ClassResolver.writeClass(ClassResolver.java:1240)
at org.apache.fury.Fury.write(Fury.java:313)
at org.apache.fury.Fury.serialize(Fury.java:248)
at org.apache.fury.Fury.serialize(Fury.java:220)
at org.apache.fury.ThreadLocalFury.serialize(ThreadLocalFury.java:91)
at com.mindflow.common.event.recovery.EventBusExceptionRecover.serializeObject(EventBusExceptionRecover.java:157)
at com.mindflow.common.event.recovery.EventBusExceptionRecover.save(EventBusExceptionRecover.java:108)
at com.mindflow.common.exception.mapper.EventExceptionMapper.lambda$handle$1(EventExceptionMapper.java:66)
at java.util.Optional.ifPresent(Optional.java:178)
at com.mindflow.common.exception.mapper.EventExceptionMapper.lambda$handle$2(EventExceptionMapper.java:66)
at java.util.Optional.ifPresent(Optional.java:178)
at com.mindflow.common.exception.mapper.EventExceptionMapper.handle(EventExceptionMapper.java:66)
at com.mindflow.common.exception.mapper.EventExceptionMapper.handle(EventExceptionMapper.java:30)
at io.vertx.core.impl.ContextBase.reportException(ContextBase.java:199)
at io.vertx.core.impl.DuplicatedContext.reportException(DuplicatedContext.java:108)
at io.vertx.core.impl.future.FutureImpl$2.onFailure(FutureImpl.java:117)
at io.vertx.core.impl.future.FutureBase.lambda$emitFailure$1(FutureBase.java:69)
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:833)
Anything Else?
Are you willing to submit a PR?
- [ ] I'm willing to submit a PR!
As the error message said, you need to set meta context before serializing. This is an advanced feature. We have a new option scopedMetaShare, which can set meta context automatically, but it is still in main branch