Пустой файл при попытке маршалировать объект jaxb с помощью потоков akka - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь маршалировать объект jaxb в строку XML и затем записать его в файл с помощью akka Streams, но после выполнения созданный файл пуст.

Я уже проверил метод маршалинга, но он отлично работает без потоков.Помогите мне, пожалуйста, понять, где находится ошибка.

Вот мой метод тестирования:

  @Test
    public void singlePojoTest() {
        ActorSystem actor = ActorSystem.create();
        Materializer materializer = ActorMaterializer.create(actor);
        //Creating and initializing of JAXB POJO
        AuditFile.Header header = new AuditFile.Header();
        initHeader(header,calendar);
        // useMarshaller - is converting object to xml String
        Flow<Object,String,NotUsed> flow = Flow.of(Object.class).map(o -> useMarshaller(o));
        Source<String,NotUsed> source = Source.single((Object)header).via(flow);
        CompletionStage<IOResult> result = source.map(string -> ByteString.fromString(string)).runWith(FileIO.toPath(Paths.get("test.txt")),materializer);
        actor.terminate();
    }

Я ожидаю, что после выполнения метода - файл с маршалированным xml будетбыть созданным.

1 Ответ

0 голосов
/ 28 сентября 2019

Вы звоните actor.terminate(); сразу после запуска потока, не дожидаясь его завершения.

Вы должны «заблокировать» ваш тестовый поток и дать возможность завершить обработку асинхронного потока, прежде чем вы сможете завершить систему субъекта.

Примените следующее перед закрытием актерской системы.

result.toCompletableFuture().get();
...