You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2008/08/04 14:16:13 UTC

svn commit: r682355 - in /cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon: callstack/environment/ servletservice/ servletservice/url/

Author: reinhard
Date: Mon Aug  4 05:16:12 2008
New Revision: 682355

URL: http://svn.apache.org/viewvc?rev=682355&view=rev
Log:
. make the CallFramehelper more defensive -> check for null references
. throw exceptions in the case of a SSF self-reference or relative reference because this always requires a calling SSF request. Only an absolute reference can work without a stand-alone reference

Added:
    cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java   (with props)
Modified:
    cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/environment/CallFrameHelper.java
    cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/url/ServletURLConnection.java

Modified: cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/environment/CallFrameHelper.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/environment/CallFrameHelper.java?rev=682355&r1=682354&r2=682355&view=diff
==============================================================================
--- cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/environment/CallFrameHelper.java (original)
+++ cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/environment/CallFrameHelper.java Mon Aug  4 05:16:12 2008
@@ -33,7 +33,7 @@
  *
  * @version $Id$
  */
-public final class CallFrameHelper {
+public abstract class CallFrameHelper {
 
     /** Key for the environment {@link HttpServletRequest} in the call frame. */
     public final static String REQUEST_OBJECT  = "request";
@@ -44,10 +44,6 @@
     /** Key for the environment {@link ServletContext} in the call frame. */
     public final static String CONTEXT_OBJECT  = "context";
 
-    private CallFrameHelper() {
-        // Forbid instantiation
-    }
-
     public static final void setEnvironment(HttpServletRequest request, HttpServletResponse response, ServletContext context) {
         CallFrame frame = CallStack.getCurrentFrame();
         frame.setAttribute(REQUEST_OBJECT, request);
@@ -56,7 +52,13 @@
     }
 
     public static final HttpServletRequest getRequest() {
-        return (HttpServletRequest) CallStack.getCurrentFrame().getAttribute(REQUEST_OBJECT);
+        CallFrame currentCallFrame = CallStack.getCurrentFrame();
+        
+        if(currentCallFrame == null) {
+            return null;
+        }
+        
+        return (HttpServletRequest) currentCallFrame.getAttribute(REQUEST_OBJECT);
     }
 
     public static final void setRequest(HttpServletRequest request) {
@@ -64,7 +66,13 @@
     }
 
     public static final HttpServletResponse getResponse() {
-        return (HttpServletResponse) CallStack.getCurrentFrame().getAttribute(RESPONSE_OBJECT);
+        CallFrame currentCallFrame = CallStack.getCurrentFrame();
+        
+        if(currentCallFrame == null) {
+            return null;
+        }
+        
+        return (HttpServletResponse) currentCallFrame.getAttribute(RESPONSE_OBJECT);
     }
 
     public static final void setResponse(HttpServletResponse response) {
@@ -72,11 +80,16 @@
     }
 
     public static final ServletContext getContext() {
-        return (ServletContext) CallStack.getCurrentFrame().getAttribute(CONTEXT_OBJECT);
+        CallFrame currentCallFrame = CallStack.getCurrentFrame();
+        
+        if(currentCallFrame == null) {
+            return null;
+        }        
+        
+        return (ServletContext) currentCallFrame.getAttribute(CONTEXT_OBJECT);
     }
 
     public static final void setContext(ServletContext context) {
         CallStack.getCurrentFrame().setAttribute(CONTEXT_OBJECT, context);
     }
-
 }

Added: cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java?rev=682355&view=auto
==============================================================================
--- cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java (added)
+++ cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java Mon Aug  4 05:16:12 2008
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.cocoon.servletservice;
+
+public class NoCallingServletServiceRequestAvailableException extends RuntimeException {
+
+    public NoCallingServletServiceRequestAvailableException(String message) {
+        super(message);
+    }
+}

Propchange: cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/url/ServletURLConnection.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/url/ServletURLConnection.java?rev=682355&r1=682354&r2=682355&view=diff
==============================================================================
--- cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/url/ServletURLConnection.java (original)
+++ cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/url/ServletURLConnection.java Mon Aug  4 05:16:12 2008
@@ -31,6 +31,7 @@
 import org.apache.cocoon.servletservice.AbsoluteServletConnection;
 import org.apache.cocoon.servletservice.Absolutizable;
 import org.apache.cocoon.servletservice.CallStackHelper;
+import org.apache.cocoon.servletservice.NoCallingServletServiceRequestAvailableException;
 import org.apache.cocoon.servletservice.ServletConnection;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -63,12 +64,22 @@
         // find out the type of the reference and create a service name
         if (servletReference == null) {
             // self-reference
+            if (absolutizable == null) {
+                throw new NoCallingServletServiceRequestAvailableException(
+                        "A self-reference requires an active servlet request.");
+            }
+
             servletName = absolutizable.getServiceName();
         } else if (servletReference.endsWith(AbsoluteServletConnection.ABSOLUTE_SERVLET_SOURCE_POSTFIX)) {
             // absolute reference
             servletName = servletReference.substring(0, servletReference.length() - 1);
         } else {
             // relative reference
+            if (absolutizable == null) {
+                throw new NoCallingServletServiceRequestAvailableException(
+                        "A relative servlet call requires an active servlet request.");
+            }
+
             servletName = absolutizable.getServiceName(servletReference);
         }
 



Testing servlet:/ calls without an active request (was: svn commit: r682355 - in /cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon: callstack/environment/ servletservice/ servletservice/url/)

Posted by Reinhard Pötz <re...@apache.org>.
reinhard@apache.org wrote:
> Author: reinhard
> Date: Mon Aug  4 05:16:12 2008
> New Revision: 682355
> 
> URL: http://svn.apache.org/viewvc?rev=682355&view=rev
> Log:
> . make the CallFramehelper more defensive -> check for null references
> . throw exceptions in the case of a SSF self-reference or relative reference because this always requires a calling SSF request. Only an absolute reference can work without a stand-alone reference
> 
> Added:
>     cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/NoCallingServletServiceRequestAvailableException.java   (with props)
> Modified:
>     cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/callstack/environment/CallFrameHelper.java
>     cocoon/trunk/subprojects/cocoon-servlet-service/cocoon-servlet-service-impl/src/main/java/org/apache/cocoon/servletservice/url/ServletURLConnection.java

Any idea how this can be tested with a _simple_ setup?

-- 
Reinhard Pötz                           Managing Director, {Indoqa} GmbH
                          http://www.indoqa.com/en/people/reinhard.poetz/

Member of the Apache Software Foundation
Apache Cocoon Committer, PMC member                  reinhard@apache.org
________________________________________________________________________