java - 尝试使用 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 的文件。
解决方案
您actor.terminate();
在启动流后立即调用,而无需等待流完成。
您必须“阻塞”您的测试线程并允许异步流处理完成,然后才能终止参与者系统。
在关闭演员系统之前应用以下内容。
result.toCompletableFuture().get();
推荐阅读
- javascript - 多个点方法在彼此下方
- haskell - 函数查找中的非详尽模式
- angular - 具有 Spring Security 和 Angular 的 CAS SSO - 重定向循环
- c++ - 使用动态数量的参数构建查询
- c++ - pcl::EuclideanClusterExtraction 与 pcl::Kmeans
- android - 添加许多模块时,区域设置的更改确实有效
- java - 将小时和分钟相加 Java
- python - 在终端中更改目录 - 拒绝访问
- java - 按列对二维整数数组进行排序
- mod-rewrite - 为什么这个 RewriteRule 需要标志 [L]