![](/img/trans.png)
[英]Flink throwing com.esotericsoftware.kryo.KryoException: java.lang.NullPointerException
[英]com.esotericsoftware.kryo.KryoException: java.lang.UnsupportedOperationException: java.io.StringReader, which is a closeable resource
我的corda项目中有一个发起者和一个响应者流。 我在我的发起程序流中发送一个字符串化的 json 并期待一个字符串作为交易对手的确认。
String acknowledgment =
counterPartySession.sendAndReceive(String.class,jsonMessage.toString()).unwrap(data -> data);
在对方流程中,我试图检索消息并发送一个字符串作为响应。
JSONParser parser = new JSONParser();
String receivedMessage = session.receive(String.class).unwrap(data -> data);
JSONObject jsonObject = (JSONObject) parser.parse(receivedMessage);
String correlationId = (String) jsonObject.get("correlationId");
String response = "received message with correlationId: "+correlationId;
session.send(response);
但在交易对手流程中,我收到以下堆栈跟踪错误。
com.esotericsoftware.kryo.KryoException: java.lang.UnsupportedOperationException: java.io.StringReader, which is a closeable resource, has been detected during flow checkpointing. Restoring such resources across node restarts is not supported. Make sure code accessing it is confined to a private method or the reference is nulled out.
Serialization trace:
zzReader (org.json.simple.parser.Yylex)
lexer (org.json.simple.parser.JSONParser)
dataObject (co.paralleluniverse.fibers.Stack)
stack (net.corda.node.services.statemachine.FlowStateMachineImpl)
at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:101) ~[kryo-4.0.2.jar:?]
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.write(CompatibleFieldSerializer.java:65) ~[kryo-4.0.2.jar:?]
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) ~[kryo-4.0.2.jar:?]
at co.paralleluniverse.io.serialization.kryo.ReplaceableObjectKryo.writeObject(ReplaceableObjectKryo.java:85) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:79) ~[kryo-4.0.2.jar:?]
at com.esotericsoftware.kryo.serializers.CompatibleFieldSerializer.write(CompatibleFieldSerializer.java:65) ~[kryo-4.0.2.jar:?]
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) ~[kryo-4.0.2.jar:?]
at co.paralleluniverse.io.serialization.kryo.ReplaceableObjectKryo.writeClassAndObject(ReplaceableObjectKryo.java:54) ~[quasar-core-0.7.10-jdk8.jar:0.7.10]
at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.write(DefaultArraySerializers.java:361) ~[kryo-4.0.2.jar:?]
当流checkpoints
时,它会序列化当前的执行堆栈。
错误说java.io.StringReader
,因为它是可关闭的,所以无法序列化。 您应该将这段代码放在一个单独的方法中,该方法没有使用@Suspendable
注释,或者更好的方法是将它放在CordaService
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.