尝试使用 akka 流编组 jaxb 对象时为空文件
Empty file while trying to marshal jaxb object with akka streams
我正在尝试将 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 的文件。
您在启动流后立即调用 actor.terminate();
,而不是等待流完成。
您必须 "block" 您的测试线程并允许异步流处理完成,然后才能终止 actor 系统。
在关闭演员系统之前应用以下内容。
result.toCompletableFuture().get();
我正在尝试将 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 的文件。
您在启动流后立即调用 actor.terminate();
,而不是等待流完成。
您必须 "block" 您的测试线程并允许异步流处理完成,然后才能终止 actor 系统。
在关闭演员系统之前应用以下内容。
result.toCompletableFuture().get();