"La respuesta ya se ha escrito" con Vertx

Soy nuevo en Vertx y trato de crear mi primer server de repository HTTP. Sin embargo, me he encontrado con este problema. Este es el error que recibo cuando trato de enviar una respuesta.

Jan 07, 2017 3:54:36 AM io.vertx.ext.web.impl.RoutingContextImplBase SEVERE: Unexpected exception in route java.lang.IllegalStateException: Response has already been written at io.vertx.core.http.impl.HttpServerResponseImpl.checkWritten(HttpServerResponseImpl.java:559) at io.vertx.core.http.impl.HttpServerResponseImpl.putHeader(HttpServerResponseImpl.java:156) at io.vertx.core.http.impl.HttpServerResponseImpl.putHeader(HttpServerResponseImpl.java:54) at com.themolecule.utils.Response.sendResponse(Response.kt:25) at com.themolecule.api.UserAPI.addUser(UserAPI.kt:52) at TheMoleculeAPI$main$3.handle(TheMoleculeAPI.kt:50) at TheMoleculeAPI$main$3.handle(TheMoleculeAPI.kt:19) at io.vertx.ext.web.impl.RouteImpl.handleContext(RouteImpl.java:215) at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:78) at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:94) at io.vertx.ext.web.handler.impl.AuthHandlerImpl.authorise(AuthHandlerImpl.java:86) at 

Y así es como he configurado mis routes.

 // setup verx val vertx = Vertx.vertx() val router = Router.router(vertx) val allowHeaders = HashSet<String>() allowHeaders.add("x-requested-with") allowHeaders.add("Access-Control-Allow-Origin") allowHeaders.add("origin") allowHeaders.add("Content-Type") allowHeaders.add("accept") val allowMethods = HashSet<HttpMethod>() allowMethods.add(HttpMethod.GET) allowMethods.add(HttpMethod.POST) allowMethods.add(HttpMethod.DELETE) allowMethods.add(HttpMethod.PATCH) router.route().handler(CorsHandler.create("*") .allowedHeaders(allowHeaders) .allowedMethods(allowMethods)) router.route().handler(BodyHandler.create()) val config = JsonObject().put("keyStore", JsonObject() .put("path", "keystore.jceks") .put("type", "jceks") .put("password", "password")) // protect the API, login outside of JWT router.route("/them/*").handler(JWTAuthHandler.create(jwt, "/them/login")) //login routes router.post("/them/login").handler { it -> loginAPI.login(it, jwt) } //user routes router.get("/them/user/getusers").handler { it -> userAPI.getUsers(it) } router.post("/them/user/addUser").handler { it -> userAPI.addUser(it) } 

Este es el código con el que parece tener el problema.

 fun sendResponse(responseCode: Int, responseMsg: String, context: RoutingContext) { val userResponse = JsonObject().put("response", responseMsg) context .response() .putHeader("content-type", "application/json") .setStatusCode(responseCode) .end(userResponse.encodePrettily()) } 

¿Estoy haciendo algo mal con los manipuladores? Traté de cambiar el método de respuesta un montón de veces, pero nada parece funcionar. Esto está escrito en Kotlin. Si necesito agregar más context, solo di la palabra!

editar: se agregó el método addUser

 fun addUser(context: RoutingContext) { val request = context.bodyAsJson val newUser = NewUserRequestDTO(request.getString("userID").trim(), request.getString("password").trim()) newUser.userID.trim() if (!newUser.userID.isNullOrEmpty() && !newUser.password.isNullOrEmpty()) { //check user ID if (userDAO.userIdInUse(newUser.userID)) { Response.sendResponse(400, Response.ResponseMessage.ID_IN_USE.message, context) return } //check password valid val isValid: Boolean = SecurityUtils.checkPasswordCompliance(newUser.password) if (!isValid) { Response.sendResponse(400, Response.ResponseMessage.PASSWORD_IS_NOT_VALID.message, context) return } val saltedPass = SecurityUtils.genSaltedPasswordAndSalt(newUser.password) userDAO.addUser(newUser.userID, saltedPass.salt.toString(), saltedPass.pwdDigest.toString()) } else { Response.sendResponse(401, Response.ResponseMessage.NO_USERNAME_OR_PASSWORD.message, context) return } Response.sendResponse(200, Response.ResponseMessage.USER_CREATED_SUCCESSFULLY.message, context) }