Intereting Posts
java.lang.ClassNotFoundException: com.intellij.junit5.JUnit5IdeaTestRunner, используя spek в kotlin Kotlin Один аргумент типа, ожидаемый для класса для абстрактного общего владельца представления Доступ к наборам источников с kotlin-dsl для градиента Настроить аргументы компилятора Активность фрагмента фрагмента kotlin имеет вид с одинаковым идентификатором, это не нормально Как использовать Spek Тип несоответствия: выведенный тип – FragmentActivity? но при обновлении библиотеки поддержки до 27.0.0 Android Studio 3.0 beta2 Отметить неиспользованные параметры в Котлине Модуль библиотеки Android, разработанный в Kotlin, экспортируется в приложение Java, вызывающее неудачное разрешение: Lkotlin / jvm / internal / Intrinsics Возможно ли реализовать индивидуальное деструктурирование для не-класса данных в Котлин? Является ли хорошей практикой использовать @Inject для Android Fragment на Dagger2? Возможно ли использовать String как PrimaryKey в Android Room Синтаксис Котлина для вывода общего супертипа из подтипа Валь и Вар в Котлине

Локаторы подресурсов в Kotlin / Dropwizard

Я пытаюсь реализовать ресурс с subresource в Dropwizard 1.0, используя Kotlin 1.0.3. У меня есть образец ресурса:

package net.reznik.stackoverflow.resources import javax.ws.rs.Consumes import javax.ws.rs.Path import javax.ws.rs.PathParam import javax.ws.rs.Produces import javax.ws.rs.core.MediaType @Path("/test") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) class TestResource { @Path("/{foo}/") fun subresource(@PathParam("foo") foo: String): Any { return TestSubResource() } } 

И субресурс:

 package net.reznik.stackoverflow.resources import javax.ws.rs.POST import javax.ws.rs.Path import javax.ws.rs.core.MediaType import javax.ws.rs.core.Response class TestSubResource { @POST @Path("/bar") fun bar(request: String): Response { return Response.ok("entity received: $request", MediaType.TEXT_PLAIN_TYPE).build() } } 

Если я изменю тип возврата функции subresource от Any до TestSubResource , тогда все будет работать так, как ожидалось. Я бы хотел использовать Any как возвращаемый тип, чтобы я мог возвращать разные подресурсы в зависимости от значения {foo} .

При использовании Any , dropwizard срабатывает при запуске с длинной stacktrace …

 WARN [2016-08-31 22:01:32,454] /: unavailable ! java.lang.NullPointerException: null ! at io.dropwizard.jersey.DropwizardResourceConfig$EndpointLogger.populate(DropwizardResourceConfig.java:173) ! at io.dropwizard.jersey.DropwizardResourceConfig$EndpointLogger.populate(DropwizardResourceConfig.java:164) ! at io.dropwizard.jersey.DropwizardResourceConfig$EndpointLogger.populate(DropwizardResourceConfig.java:189) ! at io.dropwizard.jersey.DropwizardResourceConfig$EndpointLogger.populate(DropwizardResourceConfig.java:164) ! at io.dropwizard.jersey.DropwizardResourceConfig$EndpointLogger.populate(DropwizardResourceConfig.java:159) ! at io.dropwizard.jersey.DropwizardResourceConfig.getEndpointsInfo(DropwizardResourceConfig.java:130) ! at io.dropwizard.jersey.DropwizardResourceConfig.logComponents(DropwizardResourceConfig.java:80) ! at io.dropwizard.jersey.DropwizardResourceConfig$ComponentLoggingListener.onEvent(DropwizardResourceConfig.java:245) ! at org.glassfish.jersey.server.internal.monitoring.CompositeApplicationEventListener.onEvent(CompositeApplicationEventListener.java:74) ! at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:629) ! at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184) ! at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350) ! at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347) ! at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ! at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ! at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255) ! at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:347) ! at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392) ! at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) ! at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369) ! at javax.servlet.GenericServlet.init(GenericServlet.java:244) ! at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:640) ! at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:419) ! at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:875) ! at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:349) ! at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:772) ! at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) ! at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:106) ! at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) ! at com.codahale.metrics.jetty9.InstrumentedHandler.doStart(InstrumentedHandler.java:103) ! at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) ! at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) ! at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:106) ! at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) ! at org.eclipse.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:231) ! at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:106) ! at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) ! at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:106) ! at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) ! at org.eclipse.jetty.server.handler.StatisticsHandler.doStart(StatisticsHandler.java:252) ! at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) ! at org.eclipse.jetty.server.Server.start(Server.java:411) ! at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:106) ! at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) ! at org.eclipse.jetty.server.Server.doStart(Server.java:378) ! at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ! at io.dropwizard.cli.ServerCommand.run(ServerCommand.java:53) ! at io.dropwizard.cli.EnvironmentCommand.run(EnvironmentCommand.java:44) ! at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:85) ! at io.dropwizard.cli.Cli.run(Cli.java:75) ! at io.dropwizard.Application.run(Application.java:79) 

Есть ли способ реализовать локатор подресурсов с kotlin / dropwizard, чтобы я мог динамически возвращать один из нескольких подресурсов на основе моей собственной логики – т. Е. Использовать возвращаемый тип Any ?

Solutions Collecting From Web of "Локаторы подресурсов в Kotlin / Dropwizard"

Когда Джерси работает с полиморфными ресурсами, возвращающими тип, который также является ресурсом, он решает этот под-ресурс во время выполнения во время запроса. DropWizard использует Джерси в значительной степени как есть, и поэтому будет поддерживать этот прецедент.

Но у DropWizard есть функция для регистрации вывода создаваемых привязок маршрутизации, где она выводит конфигурацию ресурсов, которую она определила во время запуска Servlet. И этот код имеет ошибку. Я сообщил о точной ошибке здесь:

https://github.com/dropwizard/dropwizard/issues/1716

Я не вижу легкой работы, например, отключение этого сеанса регистрации и отмену регистрации. Похоже, в DropWizard необходимо сделать патч.

ОБНОВЛЕНИЕ: эта проблема была решена с помощью запроса на перенаправление https://github.com/dropwizard/dropwizard/pull/1718, и если вы отслеживаете следующий выпуск, используя это слияние в master он будет включать это исправление.