【问题标题】:Hazelcast. Failed to serialize榛树。序列化失败
【发布时间】:2020-06-03 13:41:24
【问题描述】:

我用过

  • Apache Camel 2.23.4;
  • Hazelcast 3.12.6.

更新 Apache Camel:

  • Apache Camel 3.2.0;
  • Hazelcast 3.12.6.

在向 hazelcast IMap 添加对象时更新 apache camel 后,我得到一个序列化异常。

@lombok.Value
@lombok.AllArgsConstructor
public class Tasks implements Serializable {
  private String id;
  private String correlationId;
  private String key;
  private Map<String, Object> body;
  private Map<String, Object> props;
  private Boolean timer;
}

当放置在地图上的对象发生异常时

IMap<String, Tasks> IMapTasks=hazelcastInstance.getMap(TASK_MAP_NAME);
IMapTasks.put(task.getId(), taks);

堆栈跟踪:

 Error receiving Notification Task control message : Failed to serialize 'home.test.service.model.Task'
com.hazelcast.nio.serialization.HazelcastSerializationException: Failed to serialize 'home.test.service.model.Task'
at com.hazelcast.internal.serialization.impl.SerializationUtil.handleSerializeException(SerializationUtil.java:82) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:157) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:133) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toData(AbstractSerializationService.java:118) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toData(AbstractSerializationService.java:106) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.spi.impl.NodeEngineImpl.toData(NodeEngineImpl.java:319) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.spi.AbstractDistributedObject.toData(AbstractDistributedObject.java:68) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.map.impl.proxy.MapProxyImpl.put(MapProxyImpl.java:133) ~[hazelcast-3.12.6.jar:3.12.6]
at com.hazelcast.map.impl.proxy.MapProxyImpl.put(MapProxyImpl.java:125) ~[hazelcast-3.12.6.jar:3.12.6]
.
. 
.
Caused by: java.io.NotSerializableException: com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) ~[?:1.8.0_181]
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) ~[?:1.8.0_181]
at java.util.HashMap.internalWriteEntries(HashMap.java:1790) ~[?:1.8.0_181]
at java.util.HashMap.writeObject(HashMap.java:1363) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140) ~[?:1.8.0_181]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) ~[?:1.8.0_181]
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) ~[?:1.8.0_181]
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) ~[?:1.8.0_181]
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) ~[?:1.8.0_181]
at java.util.TreeMap.writeObject(TreeMap.java:2438) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1140) ~[?:1.8.0_181]
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) ~[?:1.8.0_181]

有什么想法吗?

【问题讨论】:

  • 好像型号名称不一样。 Error receiving Notification Task control message : Failed to serialize 'home.test.service.model.Task'public class Tasks implements Serializable
  • @HadiJ 模型名称已找到。 接收通知任务控制消息时出错:无法序列化 'home.test.service.model.Task' 此消息来自我的 try{} catch(Exception e){},异常消息:“无法序列化'home.test.service.model.Task"

标签: java serialization java-8 apache-camel hazelcast


【解决方案1】:

使用@lombok.Value 使字段成为最终字段。

java.io.Serializable 需要一个 noargs 构造函数

所以你可能需要

@lombok.AllArgsConstructor
@lombok.NoArgsConstructor
public class Tasks implements Serializable {
  private String id;
  private String correlationId;
  private String key;

【讨论】:

  • 它没有帮助我
  • java.io.NotSerializableException: com.rabbitmq.client.impl.LongStringHelper$ByteArrayLongString。您在 bodyprops 字段中放入了哪些对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2016-07-02
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多