JAX-RS (Apache CXF) Inyección de context a través de setter

Estoy intentando inyectar HttpServletRequest a mi recurso JAX-RS (implementación de Apache CXF) a través de la anotación @Context en Kotlin. Funciona bien si lo inyecto a través del parámetro de método. Pero no quiero "meter" mis interfaces con eso, así que me gustaría inyectarlo a través de campo / setter.

Lo que ocurre con la inyección de campo simple es que el proxy tiene $ en su nombre, lo que es un problema para kotlin ya que no puede trabajar con nombres de class con un dólar en el nombre.

Así que estoy tratando de hacerlo a través de setter con este método simple:

var req : HttpServletRequest? = null Context fun setRequest(req : HttpServletRequest) { this.req = req } 

La cosa es (y creo que también debería ser un problema en Java), que el setter se llama mediante reflection en org.apache.cxf.jaxrs.utils.InjectionUtils en el método injectThroughMethod que arroja java.lang.IllegalArgumentException: object is not una instancia de declarar class

Traté de googlear este problema pero sin suerte. ¿Alguien tuvo un problema similar o hay algo que estoy haciendo mal?

Por cierto, también creé un problema en JIRA de CXF.

Gracias a los chicos que comentaron el problema de CXF Jira, logré resolver esto. Para que la inyección de setter funcione con CXF, también debe definir setter en su interfaz (no solo en la implementación de class) y anotarla con @Context allí (en la interfaz). No estoy seguro si esto es realmente de acuerdo a las especificaciones, pero parece que CXF lo requiere de esa manera.

Me gusta esto:

 public MyInterface { @Context public void setRequest(HttpServletRequest req); } public MyClass implements MyInterface { private HttpServletRequest req; public void setRequest(HttpServletRequest req) { this.req = req; } } 

La explicación de Sergey de CXF Jira es:

Este no es un problema específico estándar, todo se debe al hecho de que el object de service proporcionado al time de ejecución es un proxy, y mover el colocador a la interfaz asegura que este establecedor sea parte del proxy. En mis testings, no tengo estos setters en la interfaz principal que representa el service, sino en la interfaz dedicada como Injectable. Alternativamente, con Spring al less, habilitar el modo Cglib proxy puede ayudar.

  • ¿Cuál es la forma recomendada de deserializar un documento de Firestre que contiene una matriz?
  • Documentar parameters de un parámetro de function en Kotlin
  • Comparta un module de Kotlin con un proyecto de Android y de escritorio
  • Advertencia de Kotlin: el resultado de la twig condicional del tipo ... es el molde de implicidad de Any?
  • Implementación onItemClickLitsner en recyclerView Kotlin -android
  • ¿Es una buena práctica usar la function de ejecución en lugar de devolver en Kotlin?
  • Cómo crear una list inmutable que debe recorrer un campo de otra list
  • ¿Cómo obtengo el post de la identificación del post?
  • Cómo depurar el error "No se pudo resolver com.google.android:android" en Anko
  • Cómo proteger el oyente de desplazamiento sin fin de un reciclador
  • ¿Puedes tener un constructor primario genérico en Kotlin?