首页 文章

Lagom - 使用 Headers 测试服务调用

提问于
浏览
0

我正在尝试按照文档here关于"Handling headers."我无法弄清楚如何使用标头测试服务调用调用 . 通常,我会这样做

service.sayHello().invoke(...)

我注意到 ServerServiceCallHeaderServiceCall 接受 invokeWithHeaders(...) 而我的 ServiceCall 实现为 HeaderServiceCall ,但每当我尝试将我的服务API更改为 ServerServiceCallHeaderServiceCall 时,我得到:

Error in custom provider, java.lang.IllegalArgumentException: Service calls must return ServiceCall, subtypes are not allowed

如何使用自定义请求标头编写调用服务调用的测试?我已经尝试将调用保持为API中的 ServiceCall ,使用 HeaderServiceCall 实现,并在测试中将调用转换为 HeaderServiceCall ,但在尝试执行此操作时遇到了强制转换异常 . 任何帮助深表感谢 . 谢谢 .

1 回答

  • 1

    我刚刚采用了我的测试代码来检查它:

    public HeaderServiceCall<NewUser, RegUserStatus> addUser(String id) {
    
        return (reqHeaders, postedUser) -> {
            System.out.println(reqHeaders.getHeader("Referer"));
            PersistentEntityRef<UserCommand> ref = persistentEntityRegistry.refFor(UserEntity.class, id);
            return ref.ask(new UserCommand.RegisterUser(id, postedUser)).thenApply( stat -> Pair.create(ResponseHeader.OK, stat));
        };
    }
    

    我的api:

    ServiceCall<NewUser, RegUserStatus> addUser(String id);
    

    并测试:

    @Test
    public void testIt() {
        withServer(defaultSetup(), server -> {
            UsersService service = server.client(UsersService.class);
            RegUserStatus created = service.addUser("aaa").handleRequestHeader(
                    rh -> rh.withHeader("Referer" ,"winter")
            ).invoke(new NewUser("aaa")).toCompletableFuture().get(5, SECONDS);
            assertEquals(true, created.ok); // default greeting
    
        });
    }
    

相关问题