Package org.apache.jetspeed.dispatcher

Source Code of org.apache.jetspeed.dispatcher.JetspeedRequestDispatcher

/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* 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.apache.jetspeed.dispatcher;

import java.io.IOException;
import java.io.PrintWriter;

import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.pluto.core.impl.RenderRequestImpl;
import org.apache.pluto.core.impl.RenderResponseImpl;
import org.apache.pluto.portlet.RenderResponseWrapper;

/**
* Implements the Portlet API Request Dispatcher to dispatch to portlets
*
* @author <a href="mailto:david@bluesunrise.com">David Sean Taylor </a>
* @version $Id: JetspeedRequestDispatcher.java,v 1.6 2004/09/07 17:01:56 weaver
*          Exp $
*/
public class JetspeedRequestDispatcher implements PortletRequestDispatcher {
    private RequestDispatcher requestDispatcher;

    //  private static final Log log =
    // LogFactory.getLog(JetspeedRequestDispatcher.class);

    public JetspeedRequestDispatcher(RequestDispatcher requestDispatcher) {
        if (requestDispatcher == null) {
            throw new IllegalArgumentException("RequestDispatcher cannot be null for JetspeedRequestDispatcher.");
        }
        this.requestDispatcher = requestDispatcher;
    }

    // portlet-only implementation

    public void include(RenderRequest request, RenderResponse response) throws PortletException, java.io.IOException {
        HttpServletResponse servletResponse = null;
        try {
            HttpServletRequest servletRequest = (HttpServletRequest) ((RenderRequestImpl) request).getRequest();

            ///////////////Fix for WebWork Portal FrameWork//////////////////////////////
            if (response instanceof RenderResponseWrapper)
                servletResponse = (HttpServletResponse) response;
                //servletResponse = (HttpServletResponse) ((RenderResponseWrapper) response).getResponse();
            else
                servletResponse = (HttpServletResponse) ((RenderResponseImpl) response).getResponse();
           
            this.requestDispatcher.include(servletRequest, servletResponse);

        } catch (Exception e) {
            PrintWriter pw = null;
            if (servletResponse != null) {
                System.out.println("3: " + e.getClass());
                e.printStackTrace();
                pw = getPrintWriter(servletResponse);
                pw.write("JetspeedRequestDispatcher failed to include servlet resources. (details below) <br/>");
                pw.write("Exception: " + e.getClass().getName() + " <br/>");
                pw.write("Message: " + e.getMessage() + " <br/>");
                writeStackTrace(e.getStackTrace(), pw);

            }
            //log.error("JetspeedRequestDispatcher failed (details below)");
            //log.error(
            //    "Begin: *******************************************
            // JetspeedRequestDispatcher Failure
            // Report******************************************");
            // log.error("Cause: " + e.getMessage(), e);
            if (e.getCause() != null) {
                // log.error("Root Cause: " + e.getCause().getMessage(),
                // e.getCause());
                if (pw != null) {
                    pw.write("<p>Root Cause: </p>");
                    pw.write("Message: " + e.getCause().getMessage() + " <br/>");
                    pw.write("Exception: " + e.getCause().getClass().getName() + " <br/>");
                    writeStackTrace(e.getCause().getStackTrace(), pw);
                }

                // log.error(
                //     "End:
                // *******************************************JetspeedRequestDispatcher
                // Failure Report******************************************");
                if (pw != null)
                    pw.flush();
                throw new PortletException(e);
            } else {
                //log.error(
                //    "End:
                // *******************************************JetspeedRequestDispatcher
                // Failure Report******************************************");
                if (pw != null)
                    pw.flush();
                throw new PortletException(e);
            }
        }
    }

    protected static final void writeStackTrace(StackTraceElement[] traceArray, PrintWriter pw) {
        pw.write("<p>Stack Trace: </p>");
        for (int i = 0; i < traceArray.length; i++) {
            pw.write("&nbsp;&nbsp;&nbsp;" + traceArray[i].toString() + "<br />");
        }
    }

    private static final PrintWriter getPrintWriter(ServletResponse response) throws IOException {
        PrintWriter pw = null;
        try {
            pw = response.getWriter();
        } catch (IllegalStateException ise) {
            pw = new PrintWriter(response.getOutputStream());
        }

        return pw;
    }

}
TOP

Related Classes of org.apache.jetspeed.dispatcher.JetspeedRequestDispatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.