记录一个序列化报空指针的问题 Caused by: com.esotericsoftware.kryo.KryoException: java.lang.NullPointerException


前言

今天早上处理了一个序列化报空指针的问题,最终看了源码,也没找到对应空的地方。最后只好选择不做序列化处理。使用了transient 关键字


一、异常

Caused by: com.esotericsoftware.kryo.KryoException: java.lang.NullPointerException
Serialization trace:
exp (com.ai.gaimops.log.jsonobj.eventtypesource.SystemMapping)
systemMapping (com.ai.cass.dc.risk.domain.dto.eventType.EngineOriginalEventType)
	at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:82)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:495)
	at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:523)
	at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:61)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:495)
	at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:599)
	at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:95)
	at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:21)
	at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:505)
	at org.apache.flink.api.java.typeutils.runtime.kryo.KryoSerializer.copy(KryoSerializer.java:266)
	at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.pushToOperator(CopyingChainingOutput.java:80)
	at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:57)
	at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutput.collect(CopyingChainingOutput.java:29)
	at org.apache.flink.streaming.runtime.tasks.BroadcastingOutputCollector.collect(BroadcastingOutputCollector.java:77)
	at org.apache.flink.streaming.runtime.tasks.BroadcastingOutputCollector.collect(BroadcastingOutputCollector.java:32)
	at org.apache.flink.streaming.api.operators.CountingOutput.collect(CountingOutput.java:56)
	at org.apache.flink.streaming.api.operators.CountingOutput.collect(CountingOutput.java:29)
	at org.apache.flink.streaming.api.operators.TimestampedCollector.collect(TimestampedCollector.java:51)
	at com.ai.cass.dc.risk.domain.function.AioLogRichParamMapFunction.flatMap(AioLogRichParamMapFunction.java:123)
	at com.ai.cass.dc.risk.domain.function.AioLogRichParamMapFunction.flatMap(AioLogRichParamMapFunction.java:45)

二、方案

查看报错,可以快速定位到,实在序列化 EngineOriginalEventType 中的 SystemMapping 中的 exp 出的问题。
于是看了下SystemMapping

public class SystemMapping {

    private Boolean isMapping;

    private String targetField;

    private String systemField;

    private Boolean isExpression;

    private String expression;

    private Expression exp;
}
那就debug一下吧,报错的地方,找到序列化

在这里插入图片描述
最终就是这里面空了个什么,导致的异常。我懒得找了。我选择直接避开。

    private transient  Expression exp;

ok,这样问题就搞定了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值