在camel 2.x中marshali((.serialization((。它在camel3.x中已经不存在了。在camel3中Java对象序列化可能吗?
您可以编写自己的Processor、Bean、DataFormat或TypeConverter来实现这一点
@Component
public class Serializer {
@Handler
public String serializeToBase64String(@Body Serializable inputObject) {
Assert.notNull(inputObject, "Object in Exchange Body must implement Serializable!");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
oos.writeObject(inputObject);
} catch (IOException e) {
// ...
}
return Base64.getEncoder().encodeToString(baos.toByteArray());
}
}
然后在您的骆驼路线中使用,只需使用:
.bean("serializer")
代替:
.marshal().serialization()
也就是说,如果你能帮助它,就避免序列化任何Java对象以进行长期存储或应用程序之间的通信。序列化类在存储后可能已更改,不再工作。如果用于通信,则会在应用程序之间增加不可接受的耦合量。我们不仅强制应用程序使用相同的语言(Java(来实现,甚至强制要序列化/反序列化的类使用相同版本,从而强制两者共享特定于领域的模型库。
相反,如果您能够,最好使用JSON、XML或某种其他形式的语言/类无关通信来减少耦合。