Buggy code:
public class AnnotationMethodHandlerAdapter extends PortletContentGenerator implements BeanFactoryAware , Ordered , HandlerAdapter { private static final String IMPLICIT_MODEL_ATTRIBUTE = "org.springframework.web.portlet.mvc.ImplicitModel" ; private WebBindingInitializer webBindingInitializer ; private SessionAttributeStore sessionAttributeStore = new DefaultSessionAttributeStore ( ) ; private int cacheSecondsForSessionAttributeHandlers = 0 ; private boolean synchronizeOnSession = false ; private ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer ( ) ; private WebArgumentResolver [ ] customArgumentResolvers ; private ModelAndViewResolver [ ] customModelAndViewResolvers ; private int order = Ordered . LOWEST_PRECEDENCE ; private ConfigurableBeanFactory beanFactory ; private BeanExpressionContext expressionContext ; private final Map < Class < ? > , AnnotationMethodHandlerAdapter . PortletHandlerMethodResolver > methodResolverCache = new ConcurrentHashMap < Class < ? > , AnnotationMethodHandlerAdapter . PortletHandlerMethodResolver > ( ) ; public void setWebBindingInitializer ( WebBindingInitializer webBindingInitializer ) { } public void setSessionAttributeStore ( SessionAttributeStore sessionAttributeStore ) { } public void setCacheSecondsForSessionAttributeHandlers ( int cacheSecondsForSessionAttributeHandlers ) { } public void setSynchronizeOnSession ( boolean synchronizeOnSession ) { } public void setParameterNameDiscoverer ( ParameterNameDiscoverer parameterNameDiscoverer ) { } public void setCustomArgumentResolver ( WebArgumentResolver argumentResolver ) { } public void setCustomArgumentResolvers ( WebArgumentResolver [ ] argumentResolvers ) { } public void setCustomModelAndViewResolver ( ModelAndViewResolver customModelAndViewResolver ) { } public void setCustomModelAndViewResolvers ( ModelAndViewResolver [ ] customModelAndViewResolvers ) { } public void setOrder ( int order ) { } public int getOrder ( ) { } public void setBeanFactory ( BeanFactory beanFactory ) { } public boolean supports ( Object handler ) { } public void handleAction ( ActionRequest request , ActionResponse response , Object handler ) throws Exception { } public ModelAndView handleRender ( RenderRequest request , RenderResponse response , Object handler ) throws Exception { } public ModelAndView handleResource ( ResourceRequest request , ResourceResponse response , Object handler ) throws Exception { } public void handleEvent ( EventRequest request , EventResponse response , Object handler ) throws Exception { } protected ModelAndView doHandle ( PortletRequest request , PortletResponse response , Object handler ) throws Exception { } private ModelAndView invokeHandlerMethod ( PortletRequest request , PortletResponse response , Object handler , ExtendedModelMap implicitModel ) throws Exception { } private AnnotationMethodHandlerAdapter . PortletHandlerMethodResolver getMethodResolver ( Object handler ) { } protected PortletRequestDataBinder createBinder ( PortletRequest request , Object target , String objectName ) throws Exception { } private static class PortletHandlerMethodResolver extends HandlerMethodResolver { private final Map < Method , AnnotationMethodHandlerAdapter . RequestMappingInfo > mappings = new HashMap < Method , AnnotationMethodHandlerAdapter . RequestMappingInfo > ( ) ; public PortletHandlerMethodResolver ( Class < ? > handlerType ) { } @ Override protected boolean isHandlerMethod ( Method method ) { } public Method resolveHandlerMethod ( PortletRequest request ) throws PortletException { } private String determineDefaultPhase ( Method handlerMethod ) { } } private class PortletHandlerMethodInvoker extends HandlerMethodInvoker { public PortletHandlerMethodInvoker ( HandlerMethodResolver resolver ) { } @ Override protected void raiseMissingParameterException ( String paramName , Class paramType ) throws Exception { <START_BUG> throw new MissingPortletRequestParameterException ( paramName , paramType . getName ( ) ) ; <END_BUG> } @ Override protected void raiseSessionRequiredException ( String message ) throws Exception { } @ Override protected WebDataBinder createBinder ( NativeWebRequest webRequest , Object target , String objectName ) throws Exception { } @ Override protected void doBind ( WebDataBinder binder , NativeWebRequest webRequest ) throws Exception { } @ Override protected Object resolveDefaultValue ( String value ) { } @ Override protected Object resolveCookieValue ( String cookieName , Class paramType , NativeWebRequest webRequest ) throws Exception { } @ Override protected Object resolveStandardArgument ( Class parameterType , NativeWebRequest webRequest ) throws Exception { } @ SuppressWarnings ( "unchecked" ) public ModelAndView getModelAndView ( Method handlerMethod , Class handlerType , Object returnValue , ExtendedModelMap implicitModel , PortletWebRequest webRequest ) { } } private static class RequestMappingInfo { public final Set < PortletMode > modes = new HashSet < PortletMode > ( ) ; public String phase ; public String value ; public final Set < String > methods = new HashSet < String > ( ) ; public String [ ] params = new String [ 0 ] ; public String [ ] headers = new String [ 0 ] ; public void initStandardMapping ( String [ ] modes , RequestMethod [ ] methods , String [ ] params , String [ ] headers ) { } public void initPhaseMapping ( String phase , String value , String [ ] params ) { } public boolean match ( PortletRequest request ) { } public boolean isBetterMatchThan ( AnnotationMethodHandlerAdapter . RequestMappingInfo other ) { } @ Override public boolean equals ( Object obj ) { } @ Override public int hashCode ( ) { } } }

Fix:
throw new MissingPortletRequestParameterException ( paramName , paramType . getSimpleName ( ) ) ;