You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2006/07/19 02:36:54 UTC

svn commit: r423311 - /incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java

Author: jmsnell
Date: Tue Jul 18 17:36:53 2006
New Revision: 423311

URL: http://svn.apache.org/viewvc?rev=423311&view=rev
Log:
Google's gdata api supports the notion of tunnelling PUT and DELETE requests via POST using
a X-Method-Override request header in order to deal with scenarios in which PUT and DELETE 
are being blocked at the firewall.  

This change moves support for the X-Method-Override header into the ServletRequestContext 
implementation so that implementations can optionally use the mechanism.  

This is a work in progress.

Modified:
    incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java

Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java?rev=423311&r1=423310&r2=423311&view=diff
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java (original)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java Tue Jul 18 17:36:53 2006
@@ -21,7 +21,6 @@
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -33,14 +32,35 @@
 public class ServletRequestContext 
   implements RequestContext {
 
+  public static final String X_OVERRIDE_HEADER = "X-Method-Override";
+  
   private HttpServletRequest servletRequest = null;
+  private boolean use_post_tunnel = true;
+  private String method = null;
+  
+  public ServletRequestContext(
+    HttpServletRequest request) {
+      this.servletRequest = request;
+  }
   
-  public ServletRequestContext(HttpServletRequest request) {
-    this.servletRequest = request;
+  public ServletRequestContext(
+    HttpServletRequest request, 
+    boolean use_post_tunnel) {
+      this(request);
+      this.use_post_tunnel = use_post_tunnel;
   }
   
   public String getMethod() {
-    return servletRequest.getMethod();
+    if (method == null) {
+      method = servletRequest.getMethod();
+      if (use_post_tunnel && method.equalsIgnoreCase("POST")) {
+        String override = servletRequest.getHeader(X_OVERRIDE_HEADER);
+        if(override != null) {
+          method = override.toUpperCase();
+        }
+      }
+    }
+    return method;
   }
   
   public URI getRequestUri() {
@@ -79,10 +99,12 @@
 	  return servletRequest.getHeader(name);
   }
 
+  @SuppressWarnings("unchecked")
   public List<String> getHeaders(String name) {
 	  return Collections.list(servletRequest.getHeaders(name));
   }
   
+  @SuppressWarnings("unchecked")
   public List<String> getHeaderNames() {
 	  return Collections.list(servletRequest.getHeaderNames());
   }
@@ -107,6 +129,7 @@
 	  return Arrays.asList(servletRequest.getParameterValues(name)); 
   }
   
+  @SuppressWarnings("unchecked")
   public List<String> getParameterNames() {
 	  return Collections.list(servletRequest.getParameterNames());
   }



Re: svn commit: r423311 - /incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java

Posted by Garrett Rooney <ro...@electricjellyfish.net>.
On 7/18/06, jmsnell@apache.org <jm...@apache.org> wrote:

> +++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java Tue Jul 18 17:36:53 2006
> @@ -21,7 +21,6 @@
>  import java.io.InputStream;
>  import java.net.URI;
>  import java.net.URISyntaxException;
> -import java.util.ArrayList;
>  import java.util.Arrays;
>  import java.util.Collections;
>  import java.util.List;
> @@ -33,14 +32,35 @@
>  public class ServletRequestContext
>    implements RequestContext {
>
> +  public static final String X_OVERRIDE_HEADER = "X-Method-Override";
> +
>    private HttpServletRequest servletRequest = null;
> +  private boolean use_post_tunnel = true;
> +  private String method = null;
> +
> +  public ServletRequestContext(
> +    HttpServletRequest request) {
> +      this.servletRequest = request;
> +  }
>
> -  public ServletRequestContext(HttpServletRequest request) {
> -    this.servletRequest = request;
> +  public ServletRequestContext(
> +    HttpServletRequest request,
> +    boolean use_post_tunnel) {
> +      this(request);
> +      this.use_post_tunnel = use_post_tunnel;
>    }
>
>    public String getMethod() {
> -    return servletRequest.getMethod();
> +    if (method == null) {
> +      method = servletRequest.getMethod();
> +      if (use_post_tunnel && method.equalsIgnoreCase("POST")) {
> +        String override = servletRequest.getHeader(X_OVERRIDE_HEADER);
> +        if(override != null) {
> +          method = override.toUpperCase();
> +        }
> +      }
> +    }
> +    return method;
>    }
>
>    public URI getRequestUri() {
> @@ -79,10 +99,12 @@
>           return servletRequest.getHeader(name);
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getHeaders(String name) {
>           return Collections.list(servletRequest.getHeaders(name));
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getHeaderNames() {
>           return Collections.list(servletRequest.getHeaderNames());
>    }
> @@ -107,6 +129,7 @@
>           return Arrays.asList(servletRequest.getParameterValues(name));
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getParameterNames() {
>           return Collections.list(servletRequest.getParameterNames());
>    }

Can we pick an indentation level for this file?  The new code is two
space indented like the rest of the tree, the existing code is clearly
not...

-garrett

Re: svn commit: r423311 - /incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java

Posted by Garrett Rooney <ro...@electricjellyfish.net>.
On 7/18/06, jmsnell@apache.org <jm...@apache.org> wrote:

> +++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java Tue Jul 18 17:36:53 2006
> @@ -21,7 +21,6 @@
>  import java.io.InputStream;
>  import java.net.URI;
>  import java.net.URISyntaxException;
> -import java.util.ArrayList;
>  import java.util.Arrays;
>  import java.util.Collections;
>  import java.util.List;
> @@ -33,14 +32,35 @@
>  public class ServletRequestContext
>    implements RequestContext {
>
> +  public static final String X_OVERRIDE_HEADER = "X-Method-Override";
> +
>    private HttpServletRequest servletRequest = null;
> +  private boolean use_post_tunnel = true;
> +  private String method = null;
> +
> +  public ServletRequestContext(
> +    HttpServletRequest request) {
> +      this.servletRequest = request;
> +  }
>
> -  public ServletRequestContext(HttpServletRequest request) {
> -    this.servletRequest = request;
> +  public ServletRequestContext(
> +    HttpServletRequest request,
> +    boolean use_post_tunnel) {
> +      this(request);
> +      this.use_post_tunnel = use_post_tunnel;
>    }
>
>    public String getMethod() {
> -    return servletRequest.getMethod();
> +    if (method == null) {
> +      method = servletRequest.getMethod();
> +      if (use_post_tunnel && method.equalsIgnoreCase("POST")) {
> +        String override = servletRequest.getHeader(X_OVERRIDE_HEADER);
> +        if(override != null) {
> +          method = override.toUpperCase();
> +        }
> +      }
> +    }
> +    return method;
>    }
>
>    public URI getRequestUri() {
> @@ -79,10 +99,12 @@
>           return servletRequest.getHeader(name);
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getHeaders(String name) {
>           return Collections.list(servletRequest.getHeaders(name));
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getHeaderNames() {
>           return Collections.list(servletRequest.getHeaderNames());
>    }
> @@ -107,6 +129,7 @@
>           return Arrays.asList(servletRequest.getParameterValues(name));
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getParameterNames() {
>           return Collections.list(servletRequest.getParameterNames());
>    }

Can we pick an indentation level for this file?  The new code is two
space indented like the rest of the tree, the existing code is clearly
not...

-garrett

Re: svn commit: r423311 - /incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java

Posted by James M Snell <ja...@gmail.com>.
I dunno, should we? :-)

Elias Torres wrote:
> Should we allow to override GET? :-)
> 
> =Elias
> 
> On 7/18/06, jmsnell@apache.org <jm...@apache.org> wrote:
>> Author: jmsnell
>> Date: Tue Jul 18 17:36:53 2006
>> New Revision: 423311
>>
>> URL: http://svn.apache.org/viewvc?rev=423311&view=rev
>> Log:
>> Google's gdata api supports the notion of tunnelling PUT and DELETE
>> requests via POST using
>> a X-Method-Override request header in order to deal with scenarios in
>> which PUT and DELETE
>> are being blocked at the firewall.
>>
>> This change moves support for the X-Method-Override header into the
>> ServletRequestContext
>> implementation so that implementations can optionally use the mechanism.
>>
>> This is a work in progress.
>>
>> Modified:
>>    
>> incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java
>>
>>
>> Modified:
>> incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java
>>
>> URL:
>> http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java?rev=423311&r1=423310&r2=423311&view=diff
>>
>> ==============================================================================
>>
>> ---
>> incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java
>> (original)
>> +++
>> incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java
>> Tue Jul 18 17:36:53 2006
>> @@ -21,7 +21,6 @@
>>  import java.io.InputStream;
>>  import java.net.URI;
>>  import java.net.URISyntaxException;
>> -import java.util.ArrayList;
>>  import java.util.Arrays;
>>  import java.util.Collections;
>>  import java.util.List;
>> @@ -33,14 +32,35 @@
>>  public class ServletRequestContext
>>    implements RequestContext {
>>
>> +  public static final String X_OVERRIDE_HEADER = "X-Method-Override";
>> +
>>    private HttpServletRequest servletRequest = null;
>> +  private boolean use_post_tunnel = true;
>> +  private String method = null;
>> +
>> +  public ServletRequestContext(
>> +    HttpServletRequest request) {
>> +      this.servletRequest = request;
>> +  }
>>
>> -  public ServletRequestContext(HttpServletRequest request) {
>> -    this.servletRequest = request;
>> +  public ServletRequestContext(
>> +    HttpServletRequest request,
>> +    boolean use_post_tunnel) {
>> +      this(request);
>> +      this.use_post_tunnel = use_post_tunnel;
>>    }
>>
>>    public String getMethod() {
>> -    return servletRequest.getMethod();
>> +    if (method == null) {
>> +      method = servletRequest.getMethod();
>> +      if (use_post_tunnel && method.equalsIgnoreCase("POST")) {
>> +        String override = servletRequest.getHeader(X_OVERRIDE_HEADER);
>> +        if(override != null) {
>> +          method = override.toUpperCase();
>> +        }
>> +      }
>> +    }
>> +    return method;
>>    }
>>
>>    public URI getRequestUri() {
>> @@ -79,10 +99,12 @@
>>           return servletRequest.getHeader(name);
>>    }
>>
>> +  @SuppressWarnings("unchecked")
>>    public List<String> getHeaders(String name) {
>>           return Collections.list(servletRequest.getHeaders(name));
>>    }
>>
>> +  @SuppressWarnings("unchecked")
>>    public List<String> getHeaderNames() {
>>           return Collections.list(servletRequest.getHeaderNames());
>>    }
>> @@ -107,6 +129,7 @@
>>           return Arrays.asList(servletRequest.getParameterValues(name));
>>    }
>>
>> +  @SuppressWarnings("unchecked")
>>    public List<String> getParameterNames() {
>>           return Collections.list(servletRequest.getParameterNames());
>>    }
>>
>>
>>
> 

Re: svn commit: r423311 - /incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java

Posted by Elias Torres <el...@torrez.us>.
Should we allow to override GET? :-)

=Elias

On 7/18/06, jmsnell@apache.org <jm...@apache.org> wrote:
> Author: jmsnell
> Date: Tue Jul 18 17:36:53 2006
> New Revision: 423311
>
> URL: http://svn.apache.org/viewvc?rev=423311&view=rev
> Log:
> Google's gdata api supports the notion of tunnelling PUT and DELETE requests via POST using
> a X-Method-Override request header in order to deal with scenarios in which PUT and DELETE
> are being blocked at the firewall.
>
> This change moves support for the X-Method-Override header into the ServletRequestContext
> implementation so that implementations can optionally use the mechanism.
>
> This is a work in progress.
>
> Modified:
>     incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java
>
> Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java
> URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java?rev=423311&r1=423310&r2=423311&view=diff
> ==============================================================================
> --- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java (original)
> +++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/server/servlet/ServletRequestContext.java Tue Jul 18 17:36:53 2006
> @@ -21,7 +21,6 @@
>  import java.io.InputStream;
>  import java.net.URI;
>  import java.net.URISyntaxException;
> -import java.util.ArrayList;
>  import java.util.Arrays;
>  import java.util.Collections;
>  import java.util.List;
> @@ -33,14 +32,35 @@
>  public class ServletRequestContext
>    implements RequestContext {
>
> +  public static final String X_OVERRIDE_HEADER = "X-Method-Override";
> +
>    private HttpServletRequest servletRequest = null;
> +  private boolean use_post_tunnel = true;
> +  private String method = null;
> +
> +  public ServletRequestContext(
> +    HttpServletRequest request) {
> +      this.servletRequest = request;
> +  }
>
> -  public ServletRequestContext(HttpServletRequest request) {
> -    this.servletRequest = request;
> +  public ServletRequestContext(
> +    HttpServletRequest request,
> +    boolean use_post_tunnel) {
> +      this(request);
> +      this.use_post_tunnel = use_post_tunnel;
>    }
>
>    public String getMethod() {
> -    return servletRequest.getMethod();
> +    if (method == null) {
> +      method = servletRequest.getMethod();
> +      if (use_post_tunnel && method.equalsIgnoreCase("POST")) {
> +        String override = servletRequest.getHeader(X_OVERRIDE_HEADER);
> +        if(override != null) {
> +          method = override.toUpperCase();
> +        }
> +      }
> +    }
> +    return method;
>    }
>
>    public URI getRequestUri() {
> @@ -79,10 +99,12 @@
>           return servletRequest.getHeader(name);
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getHeaders(String name) {
>           return Collections.list(servletRequest.getHeaders(name));
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getHeaderNames() {
>           return Collections.list(servletRequest.getHeaderNames());
>    }
> @@ -107,6 +129,7 @@
>           return Arrays.asList(servletRequest.getParameterValues(name));
>    }
>
> +  @SuppressWarnings("unchecked")
>    public List<String> getParameterNames() {
>           return Collections.list(servletRequest.getParameterNames());
>    }
>
>
>