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.

  • Asignación de valores a ArrayList usando mapTo
  • Tornadofx Javafx - Cómo volver a cargar una vista / componente
  • Confundido acerca de la security nula en Kotlin
  • Herencia de Kotlin: pasa esto como argumento de constructor
  • Accediendo al campo de una instancia diferente de la misma class en Kotlin
  • kotlin.TypeCastException: null no se puede convertir a un tipo no nulo com.midsizemango.databasekotlin.Note
  • ¿Cómo devolver un map de list con un elemento no nulo, desde un map?
  • Android: Obtenga un DAO en un ViewModel
  • Implementación de readaptación en Kotlin - Parámetro por defecto del método
  • Error "Referencia no resuelta" de Kotlin TypeToken
  • Cómo hacer que la expresión regular termine en la primera oportunidad. (Kotlin)