camel 3.x中的Java对象序列化?

pcrecxhr  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(130)

在camel 2.x中有marshal().serialization(),但在camel 3.x中已经没有了。在camel 3中Java对象序列化是否可行?

w46czmvw

w46czmvw1#

您可以编写自己的处理器、Bean、DataFormat或TypeConverter来完成此操作。下面是一种使用Bean来完成此操作的方法,然后您可以在Camel路由中的任何位置重用该Bean:

@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());
    }
}

然后要在您的Camel路线中使用,只需用途:

.bean("serializer")

而不是:

.marshal().serialization()

话虽如此,如果你能帮助它,避免序列化任何Java对象用于长期存储或应用程序之间的通信。序列化的类在存储后可能已经改变,不再工作。如果用于通信,它会在应用程序之间增加不可接受的耦合量。我们不仅强迫应用程序使用相同的语言实现(Java),甚至是要序列化/反序列化的相同版本的类,强制它们共享特定于域的模型库。
相反,如果可以的话,最好使用JSON、XML或某种其他形式的语言/类不可知的通信来减少耦合。

相关问题