Play 2.5 ActorFlow:无法从Flow <string,string,capture#1-of?=“”>转换为Flow <string,string,?>

时间:2016-08-01 11:09:25

标签: java playframework akka-stream playframework-2.5 type-mismatch

在迁移到Play 2.5时,我试图实现新的WebSocket功能,如here所述(使用actor处理WebSockets)。在Play 2.5.4中,没有play.libs.streams.ActorFlow(如示例所示),但只有play.api.libs.streams.ActorFlow。但是当我写这段代码时:

public class MyController extends Controller {
    private final ActorSystem actorSystem;
    private final Materializer materializer;

    @Inject
    public MyController(ActorSystem actorSystem, Materializer materializer) {
        this.actorSystem = actorSystem;
        this.materializer = materializer;
    }

    public WebSocket socket() {
        return WebSocket.Text.accept(request ->
                return ActorFlow.<String, String>actorRef(MyWebSocketActor::props, 256, OverflowStrategy.dropHead(),
                    actorSystem, materializer
                )
        );
    }
}

编译器给出了一个错误:

  

类型不匹配:无法从Flow <String,String,capture#1-of ?> to Flow<String,String,?>

转换

有人可以解释一下如何在2.5中实现这种方法吗?为什么我会犯这个错误?

1 个答案:

答案 0 :(得分:0)

我在Play 2.5.12中遇到了同样的问题。问题似乎是PlayFlow尚未在Play 2.5.x中为Java正确实现。 (这正是你从Scala那边得到play.api.libs.streams.ActorFlow的原因。)

适当的Java代码似乎适用于Play 2.6.x. https://github.com/playframework/playframework/blob/master/framework/src/play-streams/src/main/java/play/libs/streams/ActorFlow.java

目前,我想简单的解决方案是坚持使用(已删除的)LegacyWebsocket,直到2.6.x稳定。

(我知道这是一个古老的问题,但它仍然相关)。