From 0aa59071569bfcb7920c28b701f5b433881819d5 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Thu, 13 Jun 2013 09:45:10 +0300 Subject: [PATCH] Do not write 404 as a response to all action/event requests (#12056) Change-Id: I2b820396fc1ccfeb0eefec4456f920a410068ec2 --- .../vaadin/server/VaadinPortletResponse.java | 8 ++- .../vaadin/server/VaadinPortletService.java | 2 + .../PortletStateAwareRequestHandler.java | 54 +++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 server/src/com/vaadin/server/communication/PortletStateAwareRequestHandler.java diff --git a/server/src/com/vaadin/server/VaadinPortletResponse.java b/server/src/com/vaadin/server/VaadinPortletResponse.java index f89cb6ea7a..334b94a5dc 100644 --- a/server/src/com/vaadin/server/VaadinPortletResponse.java +++ b/server/src/com/vaadin/server/VaadinPortletResponse.java @@ -65,7 +65,13 @@ public class VaadinPortletResponse implements VaadinResponse { @Override public OutputStream getOutputStream() throws IOException { - return ((MimeResponse) response).getPortletOutputStream(); + if (response instanceof MimeResponse) { + return ((MimeResponse) response).getPortletOutputStream(); + } else { + throw new IOException( + "Output stream not available for response of type " + + response.getClass().getName()); + } } /** diff --git a/server/src/com/vaadin/server/VaadinPortletService.java b/server/src/com/vaadin/server/VaadinPortletService.java index 2eca07dd4a..c7fc5a23bd 100644 --- a/server/src/com/vaadin/server/VaadinPortletService.java +++ b/server/src/com/vaadin/server/VaadinPortletService.java @@ -32,6 +32,7 @@ import com.vaadin.server.VaadinPortlet.RequestType; import com.vaadin.server.communication.PortletBootstrapHandler; import com.vaadin.server.communication.PortletDummyRequestHandler; import com.vaadin.server.communication.PortletListenerNotifier; +import com.vaadin.server.communication.PortletStateAwareRequestHandler; import com.vaadin.server.communication.PortletUIInitHandler; import com.vaadin.ui.UI; @@ -64,6 +65,7 @@ public class VaadinPortletService extends VaadinService { handlers.add(new PortletListenerNotifier()); handlers.add(0, new PortletDummyRequestHandler()); handlers.add(0, new PortletBootstrapHandler()); + handlers.add(0, new PortletStateAwareRequestHandler()); return handlers; } diff --git a/server/src/com/vaadin/server/communication/PortletStateAwareRequestHandler.java b/server/src/com/vaadin/server/communication/PortletStateAwareRequestHandler.java new file mode 100644 index 0000000000..162c479fac --- /dev/null +++ b/server/src/com/vaadin/server/communication/PortletStateAwareRequestHandler.java @@ -0,0 +1,54 @@ +/* + * Copyright 2000-2013 Vaadin Ltd. + * + * 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 com.vaadin.server.communication; + +import java.io.IOException; + +import javax.portlet.StateAwareResponse; + +import com.vaadin.server.RequestHandler; +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinResponse; +import com.vaadin.server.VaadinSession; + +/** + * Handler which ensures that Action and Event requests are marked as handled + * and do not cause a 404 to be sent. + * + * @since 7.1 + * @author Vaadin Ltd + */ +public class PortletStateAwareRequestHandler implements RequestHandler { + + /* + * (non-Javadoc) + * + * @see com.vaadin.server.RequestHandler#handleRequest(com.vaadin.server. + * VaadinSession, com.vaadin.server.VaadinRequest, + * com.vaadin.server.VaadinResponse) + */ + @Override + public boolean handleRequest(VaadinSession session, VaadinRequest request, + VaadinResponse response) throws IOException { + if (response instanceof StateAwareResponse) { + // StateAwareResponse is fully handled by listeners through + // PortletListenerNotifier + return true; + } + return false; + } + +} -- 2.39.5