DispatcherPortlet throws custom NoHandlerFoundException instead of misleading UnavailableException (SPR-7542)

This commit is contained in:
Juergen Hoeller 2010-09-14 06:43:53 +00:00
parent a3f155220b
commit bf90a2ddb6
4 changed files with 61 additions and 13 deletions

View File

@ -39,7 +39,6 @@ import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest; import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse; import javax.portlet.ResourceResponse;
import javax.portlet.StateAwareResponse; import javax.portlet.StateAwareResponse;
import javax.portlet.UnavailableException;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -51,6 +50,7 @@ import org.springframework.context.ApplicationContext;
import org.springframework.core.OrderComparator; import org.springframework.core.OrderComparator;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PropertiesLoaderUtils; import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.core.style.StylerUtils;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartException; import org.springframework.web.multipart.MultipartException;
@ -988,14 +988,13 @@ public class DispatcherPortlet extends FrameworkPortlet {
*/ */
protected void noHandlerFound(PortletRequest request, PortletResponse response) throws Exception { protected void noHandlerFound(PortletRequest request, PortletResponse response) throws Exception {
if (pageNotFoundLogger.isWarnEnabled()) { if (pageNotFoundLogger.isWarnEnabled()) {
pageNotFoundLogger.warn("No mapping found for current request " + pageNotFoundLogger.warn("No handler found for current request " +
"in DispatcherPortlet with name '" + getPortletName() + "in DispatcherPortlet with name '" + getPortletName() +
"', mode '" + request.getPortletMode() + "', mode '" + request.getPortletMode() +
"', phase '" + request.getAttribute(PortletRequest.LIFECYCLE_PHASE) + "', phase '" + request.getAttribute(PortletRequest.LIFECYCLE_PHASE) +
"', session '" + request.getRequestedSessionId() + "', parameters " + StylerUtils.style(request.getParameterMap()));
"', user '" + getUsernameForRequest(request) + "'");
} }
throw new UnavailableException("No handler found for request"); throw new NoHandlerFoundException("No handler found for portlet request", request);
} }
/** /**

View File

@ -0,0 +1,53 @@
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.web.portlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import org.springframework.core.style.StylerUtils;
/**
* Exception to be thrown if DispatcherPortlet is unable to determine
* a corresponding handler for an incoming portlet request.
*
* @author Juergen Hoeller
* @since 3.0.5
*/
public class NoHandlerFoundException extends PortletException {
/**
* Constructor for NoHandlerFoundException.
* @param msg the detail message
*/
public NoHandlerFoundException(String msg) {
super(msg);
}
/**
* Constructor for NoHandlerFoundException.
* @param msg the detail message
* @param request the current portlet request,
* for further context to be included in the exception message
*/
public NoHandlerFoundException(String msg, PortletRequest request) {
super(msg + ": mode '" + request.getPortletMode() +
"', phase '" + request.getAttribute(PortletRequest.LIFECYCLE_PHASE) +
"', parameters " + StylerUtils.style(request.getParameterMap()));
}
}

View File

@ -37,7 +37,6 @@ import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest; import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse; import javax.portlet.ResourceResponse;
import javax.portlet.ResourceServingPortlet; import javax.portlet.ResourceServingPortlet;
import javax.portlet.UnavailableException;
import javax.xml.XMLConstants; import javax.xml.XMLConstants;
import javax.xml.namespace.QName; import javax.xml.namespace.QName;
@ -45,6 +44,7 @@ import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.web.portlet.ModelAndView; import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.NoHandlerFoundException;
import org.springframework.web.portlet.context.PortletConfigAware; import org.springframework.web.portlet.context.PortletConfigAware;
import org.springframework.web.portlet.context.PortletContextAware; import org.springframework.web.portlet.context.PortletContextAware;
import org.springframework.web.portlet.util.PortletUtils; import org.springframework.web.portlet.util.PortletUtils;
@ -190,7 +190,7 @@ public class PortletWrappingController extends AbstractController
ResourceRequest request, ResourceResponse response) throws Exception { ResourceRequest request, ResourceResponse response) throws Exception {
if (!(this.portletInstance instanceof ResourceServingPortlet)) { if (!(this.portletInstance instanceof ResourceServingPortlet)) {
throw new UnavailableException("Cannot handle resource request - target portlet [" + throw new NoHandlerFoundException("Cannot handle resource request - target portlet [" +
this.portletInstance.getClass() + " does not implement ResourceServingPortlet"); this.portletInstance.getClass() + " does not implement ResourceServingPortlet");
} }
ResourceServingPortlet resourcePortlet = (ResourceServingPortlet) this.portletInstance; ResourceServingPortlet resourcePortlet = (ResourceServingPortlet) this.portletInstance;

View File

@ -48,7 +48,6 @@ import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest; import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse; import javax.portlet.ResourceResponse;
import javax.portlet.StateAwareResponse; import javax.portlet.StateAwareResponse;
import javax.portlet.UnavailableException;
import javax.portlet.WindowState; import javax.portlet.WindowState;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
@ -62,7 +61,6 @@ import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.style.StylerUtils;
import org.springframework.ui.ExtendedModelMap; import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@ -88,6 +86,7 @@ import org.springframework.web.context.request.RequestScope;
import org.springframework.web.multipart.MultipartRequest; import org.springframework.web.multipart.MultipartRequest;
import org.springframework.web.portlet.HandlerAdapter; import org.springframework.web.portlet.HandlerAdapter;
import org.springframework.web.portlet.ModelAndView; import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.NoHandlerFoundException;
import org.springframework.web.portlet.bind.MissingPortletRequestParameterException; import org.springframework.web.portlet.bind.MissingPortletRequestParameterException;
import org.springframework.web.portlet.bind.PortletRequestDataBinder; import org.springframework.web.portlet.bind.PortletRequestDataBinder;
import org.springframework.web.portlet.bind.annotation.ActionMapping; import org.springframework.web.portlet.bind.annotation.ActionMapping;
@ -505,10 +504,7 @@ public class AnnotationMethodHandlerAdapter extends PortletContentGenerator
} }
} }
else { else {
throw new UnavailableException( throw new NoHandlerFoundException("No matching handler method found for portlet request", request);
"No matching handler method found for portlet request: mode '" + request.getPortletMode() +
"', phase '" + request.getAttribute(PortletRequest.LIFECYCLE_PHASE) +
"', parameters " + StylerUtils.style(request.getParameterMap()));
} }
} }