Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Apache Flink解决com.esotericsoftware.kryo.kryo.readObject上的NPE?_Java_Serialization_Apache Flink_Kryo - Fatal编程技术网

Java 如何使用Apache Flink解决com.esotericsoftware.kryo.kryo.readObject上的NPE?

Java 如何使用Apache Flink解决com.esotericsoftware.kryo.kryo.readObject上的NPE?,java,serialization,apache-flink,kryo,Java,Serialization,Apache Flink,Kryo,我正在使用Flink和自定义kryo类作为我的pojo类。但是 Caused by: java.lang.NullPointerException at MyTreeSerializer.read(MyTreeSerializer.java:36) at MyTreeSerializer.read(MyTreeSerializer.java:11) at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:657)

我正在使用Flink和自定义kryo类作为我的pojo类。但是

Caused by: java.lang.NullPointerException
    at MyTreeSerializer.read(MyTreeSerializer.java:36)
    at MyTreeSerializer.read(MyTreeSerializer.java:11)
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:657)
    at org.apache.flink.api.java.typeutils.runtime.kryo.KryoSerializer.copy(KryoSerializer.java:172)
    at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:414)
    ... 16 more
以下是详细信息-

  • Kryo 2.24.0

  • 我的Pojo课程

  • env.getConfig().addDefaultKryoSerializer(MyTree.class, MyTreeSerializer.class);
    
    ```

    env.getConfig().addDefaultKryoSerializer(MyTree.class, MapSerializer.class);
    
    id未序列化,但映射正在序列化

    使用MyTreeSerializer.class时,为什么它不起作用,需要帮助


    提前感谢。

    MyTreeSerializer中的以下行将导致
    空值:

    MyTree myTree = kryo.readObject(input, type, new MapSerializer());
    
    这也是为什么
    myTree.setId(id)
    会导致

    NullPointerException

    当您使用
    MapSerializer
    时,它工作正常(当然id的反序列化除外),因为
    MyTree
    扩展自实现
    Map
    TreeMap

    MyTreeSerializer
    的实现中,您试图从
    MyTree
    对象反序列化类
    MyTree
    的成员。这就像
    MyTreeSerializer
    需要一个如下示例代码中所示的对象:

    公共类MyTree扩展树映射{ 私有字符串id; 私家MyTree MyTree; 公共字符串getId(){ 返回id; } 公共无效集合id(字符串id){ this.id=id; } 公共MyTree getMyTree(){ 返回我的树; } 公共void setMyTree(MyTree MyTree){ this.myTree=myTree; } }
    它认为您需要查看
    MapSerializer
    并从中进行扩展,或者将其用作自己实现的基础,以便序列化和反序列化MyTree对象。

    MyTreeSerializer中的以下行导致
    空值:

    MyTree myTree = kryo.readObject(input, type, new MapSerializer());
    
    这也是为什么
    myTree.setId(id)
    会导致

    NullPointerException

    当您使用
    MapSerializer
    时,它工作正常(当然id的反序列化除外),因为
    MyTree
    扩展自实现
    Map
    TreeMap

    MyTreeSerializer
    的实现中,您试图从
    MyTree
    对象反序列化类
    MyTree
    的成员。这就像
    MyTreeSerializer
    需要一个如下示例代码中所示的对象:

    公共类MyTree扩展树映射{ 私有字符串id; 私家MyTree MyTree; 公共字符串getId(){ 返回id; } 公共无效集合id(字符串id){ this.id=id; } 公共MyTree getMyTree(){ 返回我的树; } 公共void setMyTree(MyTree MyTree){ this.myTree=myTree; } }
    它认为您需要查看
    MapSerializer
    并从中进行扩展,或者将其用作自己实现的基础,以便序列化和反序列化MyTree对象。

    可能重复@hotzst No。不是。它更像是kryo+Flink相关的问题,您提供了NPE的堆栈跟踪,但没有指出这与代码中的哪行相关。有一个东西
    null
    找出它是什么以及为什么。可能是@hotzst No的重复。不是。它更像是kryo+Flink相关的问题,您提供了NPE的堆栈跟踪,但没有指出这与代码中的哪行相关。有一些东西是空的,找出它是什么以及为什么。
    env.getConfig().addDefaultKryoSerializer(MyTree.class, MapSerializer.class);
    
    MyTree myTree = kryo.readObject(input, type, new MapSerializer());
    
    public class MyTree extends TreeMap { private String id; private MyTree myTree; public String getId() { return id; } public void setId(String id) { this.id = id; } public MyTree getMyTree() { return myTree; } public void setMyTree(MyTree myTree) { this.myTree = myTree; } }