繁体   English   中英

com.esotericsoftware.kryo.KryoException: java.lang.UnsupportedOperationException: java.io.StringReader, which is a closeable resource

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM