在Akka-Http for Java中将Route转换为Flow

时间:2016-04-15 13:31:19

标签: java akka akka-http

有没有办法将javadsl Route转换为Flow?在Scala中,我们隐式使用handlerFlow,但在Java中我们没有类似的东西。

尝试调用handlerFlow,但它使用scaladsl类型并且与路径的javadsl版本不兼容。

我想使用低级版本的API来绑定到http和https,以及能够访问连接。

==========================
更新: 我使用了svezfaz答案中的想法,现在我得到了代码:

Flow<HttpRequest, HttpResponse, NotUsed> createFlow(ActorSystem system, Materializer mat) {
  scala.Function1<akka.http.scaladsl.server.RequestContext, scala.concurrent.Future<akka.http.scaladsl.server.RouteResult>> r = RouteImplementation.apply(createRoute());
  Flow f = RouteResult$.MODULE$.route2HandlerFlow(
      r,
      RoutingSettings$.MODULE$.apply(system),
      ParserSettings$.MODULE$.apply(system),
      mat,
      RoutingLog$.MODULE$.fromActorSystem(system),
      null,
      RejectionHandler$.MODULE$._mthdefault(),
      null
      ).asJava();
  return f;
}

它看起来正确,但它不能编译。可能,我必须将Scala Library包含在classpath中。然后使用其他Scala-to-Java类型转换进行一些工作。

我认为用Java中的路由重写它会更容易。

2 个答案:

答案 0 :(得分:1)

您可以从var classA1 = new Any.Namespace.01.ClassA(); var classA2 = new Different.Namespace.ClassA(); 获取灵感(见下文)。 使用akka.http.javadsl.server.HttpServiceBase将javadsl转换为scaladsl,然后调用RouteImplementation转换为流。

route2HandlerFlow

答案 1 :(得分:1)

在akka-http 10.0.6中,您可以使用

akka.http.scaladsl.server.Route.handlerFlow(route: Route): Flow[HttpRequest, HttpResponse, NotUsed]

需要一些隐含的内容,但它们很容易进入范围。