tag lib form spring exception spring-mvc controller cglib

spring - form - tag lib jstl



En Spring, ¿por qué se pierden números de línea para CGLib en un POJO? (2)

Añadiré a esta respuesta ya que conozco mi problema. Como es común cuando no entiendes un problema, no hice la pregunta correcta.

Recientemente cambié al uso de compilaciones de ANT en lugar de Eclipse Builder. No me di cuenta de que necesitaba habilitar expresamente la información de depuración en la tarea. Inconscientemente culpé a CGLib cuando lo vi sentado frente a este error, pero todo lo que necesitaba era una modificación de compilación ANT.

Aplicación web Spring MVC:

Tengo un seguimiento de pila sin números de línea (que se muestra en la parte inferior).

Supongo que esto se debe a que CGLib se está ejecutando en el controlador. Pero esto es extraño para mí, la excepción real ocurre en ServerBatchRemoteRequestAcceptor , un pojo que no está inyectado, no el controlador. Solo se crea en el objeto Controlador.

Ejemplo:

@Controller class MyController { MyPojo pojo = new MyPojo(); @RequestMapping("myaction") public void doMyAction(){ pojo.methodToCauseNullPointerException() } }

java.lang.NullPointerException at mycommons.services.batchremoteprocessor.ServerBatchRemoteRequestAcceptor.acceptRequest(Unknown Source) at com.proxyandvpn.web.controllers.RESTServicesController.handleGenericClientRequest(Unknown Source) at com.proxyandvpn.web.controllers.RESTServicesController$$FastClassByCGLIB$$dff24f0f.invoke(<generated>) at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)

¿Puede alguien explicarme este comportamiento? ¿Todas las llamadas bajo mis controladores serán sin números de línea debido a CGLib?

¿Debo escribir mis Controladores en una interfaz para que se utilicen los proxies? ¿Eso es normal? Lo hago por los servicios, pero he hecho los controladores como POJO simples.


Spring usa CGLIB para generar objetos proxy que se encuentran frente a algunos de sus componentes / controladores. Las llamadas a esos componentes pasan a través de los proxies CGLIB. Estos proxies se generan en tiempo de ejecución, sin código fuente, por lo que no tienen números de línea.

Sin embargo, puede ignorar las líneas de rastreo de la pila que mencionan CGLIB, pretender que no están allí, que deben ser transparentes.

En su seguimiento de pila, la llamada a RESTServicesController.handleGenericClientRequest ha sido procesada, pero la llamada todavía está llegando allí. El NPE se está produciendo dentro de ServerBatchRemoteRequestAcceptor , que se invoca desde RESTServicesController.handleGenericClientRequest .

Sin embargo, el código fuente que publicó no tiene relación con el seguimiento de la pila, por lo que es difícil comentar por qué sucedió.