Хроника очереди, сериализующие метки

Использование версии 4.5.27 Я использую этот код, чтобы записать Throwable в очередь, а затем прочитать его обратно.

    public static void writeThrowableToQueue(){
    final Throwable throwable;
    try {
        throw new RuntimeException("serialise");
    }catch(Throwable e){
        throwable = e;
    }


    try (ChronicleQueue queue = SingleChronicleQueueBuilder.binary(file).build()) {
        final ExcerptAppender appender = queue.acquireAppender();
            appender.writeDocument(w -> {
                w.getValueOut().int64(System.currentTimeMillis());
                w.getValueOut().object(throwable);
            });
    }

    try (ChronicleQueue queue = SingleChronicleQueueBuilder.binary(file).build()) {
        final ExcerptTailer tailer = queue.createTailer();
        tailer.readDocument(w -> {
            ValueIn in = w.getValueIn();
            long time = in.int64();
            System.out.println(in.object());
        });
    }

}

Запись работает нормально, и я вижу там исключение при сбросе очереди.

Но чтение бросает это исключение:

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.clear(Collections.java:1074)
at net.openhft.chronicle.wire.WireMarshaller$CollectionFieldAccess.read(WireMarshaller.java:569)
at net.openhft.chronicle.wire.WireMarshaller.readMarshallable(WireMarshaller.java:143)
at net.openhft.chronicle.wire.Wires.readMarshallable(Wires.java:253)
at net.openhft.chronicle.wire.SerializationStrategies$5.readUsing(SerializationStrategies.java:121)
at net.openhft.chronicle.wire.BinaryWire$BinaryValueIn.marshallable(BinaryWire.java:2897)
at net.openhft.chronicle.wire.ValueIn.object(ValueIn.java:482)
at net.openhft.chronicle.wire.BinaryWire$BinaryValueIn.objectWithInferredType(BinaryWire.java:3158)
at net.openhft.chronicle.wire.ValueIn.object(ValueIn.java:435)
at queue.QueuePlayGround.lambda$writeThrowableToQueue$1(QueuePlayGround.java:44)
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueExcerpts$StoreTailer.readDocument(SingleChronicleQueueExcerpts.java:805)
at queue.QueuePlayGround.writeThrowableToQueue(QueuePlayGround.java:41)
at queue.QueuePlayGround.main(QueuePlayGround.java:20)

Я пробовал с другими объектами (Marshallables), и это прекрасно работает.

Большое спасибо за любую помощь

0 ответов

Другие вопросы по тегам