Kryoシリアライザを使用して、アプリケーションオブジェクトをシリアル化してカフカストリームにプッシュしようとしています。KryoシリアライザIllegalAccessError at runtime
は、シリアル化コードが
private ThreadLocal<Kryo> kryos = new ThreadLocal<Kryo>() {
protected Kryo initialValue() {
Kryo kryo = new Kryo();
kryo.addDefaultSerializer(MyApp.class, new MyAppKyroSerializer());
return kryo;
};
};
Serializeメソッドがありました:
@Override
public byte[] serialize(String topic, MyApp data) {
ByteBufferOutput output = new ByteBufferOutput(100);
kryos.get().writeObject(output, data);
return output.toBytes();
}
私たちは、次のないIllegalAccessErrorを取得しているアプリケーションの実行中:
Exception in thread "main" java.lang.IllegalAccessError: tried to access field com.esotericsoftware.kryo.io.Output.capacity from class com.esotericsoftware.kryo.io.ByteBufferOutput
at com.esotericsoftware.kryo.io.ByteBufferOutput.<init>(ByteBufferOutput.java:66)
at com.esotericsoftware.kryo.io.ByteBufferOutput.<init>(ByteBufferOutput.java:58)
at com.mycom.serializer.MyAppSerializer.serialize(MyAppSerializer.java:43)
これは奇妙ですByteBufferOutput理由出力を拡張し、容量は保護されたフィールドです。