2010-04-12 15 views
6

J'ai utilisé le framework spring 3 pour mon application. Tout est ok alors développé dans Netbeans Mais j'ai besoin d'une version personnalisée et fait pour la même La construction créée sans aucun problème , mais je suis l'erreur suivante L'erreur est survenue lors de l'appel de la méthode suivanteCompilez le fichier classfile au printemps 3

@RequestMapping(value = "/security/login", method = RequestMethod.POST) 
public ModelAndView login(@RequestParam String userName, @RequestParam String password, 
    HttpServletRequest request) { 
    ...................... 

Mais il Avez-vous une expérience sur ce problème ... Il existe un argument javac supplémentaire pour compiler le même (netbeans utilisé là tâche personnalisée pour la compilation)

type Rapport d'exception

un message

description The server encountered an internal error() that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.mypackage.security.controller.LoginController.login(java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest)]; nested exception is java.lang.IllegalStateException: No parameter name specified for argument of type [java.lang.String], and no parameter name information found in class file either. 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
com.mypackage.security.controller.AuthFilter.doFilter(Unknown Source) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

causes profondes

org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public org.springframework.web.servlet.ModelAndView com.mypackage.security.controller.LoginController.login(java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest)]; nested exception is java.lang.IllegalStateException: No parameter name specified for argument of type [java.lang.String], and no parameter name information found in class file either. 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
com.mypackage.security.controller.AuthFilter.doFilter(Unknown Source) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

causes profondes

 
java.lang.IllegalStateException: No parameter name specified for argument of type [java.lang.String], and no parameter name information found in class file either. 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.getRequiredParameterName(HandlerMethodInvoker.java:618) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.java:417) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:277) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:163) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
com.mypackage.security.controller.AuthFilter.doFilter(Unknown Source) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 

note La trace de pile complète de la cause première est disponible dans les journaux Apache Tomcat/6.0.18.

Répondre

18

Les noms d'argument sont stockés dans le code compilé uniquement lorsqu'il est compilé en mode débogage. Vous devez donc le compiler en mode débogage ou fournir @RequestParam avec des noms de paramètres explicites. Cette dernière approche est plus fiable car elle ne dépend pas de l'environnement:

@RequestMapping(value = "/security/login", method = RequestMethod.POST) 
public ModelAndView login(@RequestParam("userName") String userName, 
    @RequestParam("password") String password, 
    HttpServletRequest request) { 
    ...................... 
+0

attraper impressionnant - je déchirais mes cheveux, regardant JDKs, peut-être mon serveur Hudson faisait quelque chose de farfelu ... et il était cette petite chose stupide. Est-ce même documenté n'importe où? – atrain

+0

Je voulais juste dire que cela m'a sauvé des heures de douleur, de colère et de cas de rosée de montagne. –