首页 > 解决方案 > 尝试使用 akka 流编组 jaxb 对象时出现空文件

问题描述

我正在尝试将 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 的文件。

标签: javajaxbakka-stream

解决方案


actor.terminate();在启动流后立即调用,而无需等待流完成。

您必须“阻塞”您的测试线程并允许异步流处理完成,然后才能终止参与者系统。

在关闭演员系统之前应用以下内容。

result.toCompletableFuture().get();

推荐阅读