You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2008/09/30 09:24:48 UTC

svn commit: r700368 - in /tuscany/java/sca/modules: binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/ binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/ binding-http-runtime/src/test/java/org/apa...

Author: lresende
Date: Tue Sep 30 00:24:48 2008
New Revision: 700368

URL: http://svn.apache.org/viewvc?rev=700368&view=rev
Log:
[Work in progress] Enabling security policy for http binding.

Added:
    tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/
    tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/HTTPHeadersParser.java   (with props)
    tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java
      - copied, changed from r699548, tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/CacheContext.java
    tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPHeader.java   (with props)
Removed:
    tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/CacheContext.java
Modified:
    tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java
    tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceBindingProvider.java
    tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceListenerServlet.java
    tuscany/java/sca/modules/binding-http-runtime/src/test/java/org/apache/tuscany/sca/binding/http/TestBindingCacheImpl.java

Modified: tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java?rev=700368&r1=700367&r2=700368&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java (original)
+++ tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPBindingListenerServlet.java Tue Sep 30 00:24:48 2008
@@ -24,16 +24,25 @@
 import java.io.OutputStream;
 import java.net.URLDecoder;
 import java.text.ParseException;
+import java.util.List;
 
 import javax.servlet.ServletException;
+import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
 
-import org.apache.tuscany.sca.binding.http.CacheContext;
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.binding.http.HTTPCacheContext;
+import org.apache.tuscany.sca.binding.http.util.HTTPHeadersParser;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.policy.Intent;
+import org.apache.tuscany.sca.policy.PolicySet;
+import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
+import org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationPolicy;
 
 /**
  * Servlet responsible for dispatching HTTP requests to the
@@ -44,6 +53,13 @@
 public class HTTPBindingListenerServlet extends HttpServlet {
     private static final long serialVersionUID = 2865466417329430610L;
     
+    private static final QName AUTEHTICATION_INTENT = new QName("http://www.osoa.org/xmlns/sca/1.0","authentication");
+    
+    transient private Binding binding;
+
+    transient private boolean requiresAuthentication = false;
+    transient private BasicAuthenticationPolicy basicAuthenticationPolicy = null;
+
     private MessageFactory messageFactory;
     private Invoker getInvoker;
     private Invoker conditionalGetInvoker;
@@ -57,12 +73,49 @@
     /**
      * Constructs a new HTTPServiceListenerServlet.
      */
-    public HTTPBindingListenerServlet(MessageFactory messageFactory) {
+    public HTTPBindingListenerServlet(Binding binding, MessageFactory messageFactory) {
+        this.binding = binding;
         this.messageFactory = messageFactory;
+        
+
+        // find out which policies are active
+        if (binding instanceof PolicySetAttachPoint) {
+            List<Intent> intents = ((PolicySetAttachPoint)binding).getRequiredIntents();
+            for(Intent intent : intents) {
+                if(intent.getName().equals(AUTEHTICATION_INTENT)) {
+                    requiresAuthentication = true;
+                }
+            }
+
+
+            List<PolicySet> policySets = ((PolicySetAttachPoint)binding).getApplicablePolicySets();
+            for (PolicySet ps : policySets) {
+                for (Object p : ps.getPolicies()) {
+                    if (BasicAuthenticationPolicy.class.isInstance(p)) {
+                        basicAuthenticationPolicy = (BasicAuthenticationPolicy)p;
+                    } else {
+                        // etc. check for other types of policy being present
+                    }
+                }
+            }
+        }        
     }
 
     
     @Override
+    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+        if(requiresAuthentication) {
+            if(! hasAuthenticationHeader(request, response)) {
+                response.setHeader("WWW-Authenticate", "BASIC realm=\"Tuscany\"");
+                response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
+            }
+        }
+        
+        super.service(request, response);
+    }    
+    
+    @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // Get the request path
         String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8");
@@ -75,12 +128,16 @@
 
         // Invoke the get operation on the service implementation
         Message requestMessage = messageFactory.createMessage();
+
+        //store http headers to message
+        requestMessage.getHeaders().addAll(HTTPHeadersParser.getHeaders(request));
+        
         String id = path.substring(1);
         
         Message responseMessage = null;
-        CacheContext cacheContext = null;
+        HTTPCacheContext cacheContext = null;
         try { 
-           cacheContext = CacheContext.getCacheContextFromRequest(request);
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
         } catch (ParseException e) {        	
         }
 
@@ -144,9 +201,9 @@
         String id = path.substring(1);
         
         Message responseMessage = null;
-        CacheContext cacheContext = null;
+        HTTPCacheContext cacheContext = null;
         try { 
-           cacheContext = CacheContext.getCacheContextFromRequest(request);
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
         } catch (ParseException e) {        	
         }
         
@@ -210,9 +267,9 @@
         String id = path.substring(1);
         
         Message responseMessage = null;
-        CacheContext cacheContext = null;
+        HTTPCacheContext cacheContext = null;
         try { 
-           cacheContext = CacheContext.getCacheContextFromRequest(request);
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
         } catch (ParseException e) {        	
         }
         
@@ -276,9 +333,9 @@
         // String id = path.substring(1);
         
         Message responseMessage = null;
-        CacheContext cacheContext = null;
+        HTTPCacheContext cacheContext = null;
         try { 
-           cacheContext = CacheContext.getCacheContextFromRequest(request);
+           cacheContext = HTTPCacheContext.getCacheContextFromRequest(request);
         } catch (ParseException e) {        	
         }
         
@@ -314,9 +371,9 @@
 
         // Test if the ETag and LastModified are returned as a cache context.
     	Object body = responseMessage.getBody();
-    	if ( body.getClass() == CacheContext.class ) {
+    	if ( body.getClass() == HTTPCacheContext.class ) {
     		// Transfer to header if so.
-    		CacheContext cc = (CacheContext)responseMessage.getBody();
+    		HTTPCacheContext cc = (HTTPCacheContext)responseMessage.getBody();
     		if (( cc != null ) && ( cc.isEnabled() )) {
     			String eTag = cc.getETag();
             	if ( eTag != null )
@@ -328,116 +385,132 @@
     	}
     }
 
-	/**
-	 * @return the getInvoker
-	 */
-	public Invoker getGetInvoker() {
-		return getInvoker;
-	}
-
-	/**
-	 * @param getInvoker the getInvoker to set
-	 */
-	public void setGetInvoker(Invoker getInvoker) {
-		this.getInvoker = getInvoker;
-	}
-
-	/**
-	 * @return the conditionalGetInvoker
-	 */
-	public Invoker getConditionalGetInvoker() {
-		return conditionalGetInvoker;
-	}
-
-	/**
-	 * @param conditionalGetInvoker the conditionalGetInvoker to set
-	 */
-	public void setConditionalGetInvoker(Invoker conditionalGetInvoker) {
-		this.conditionalGetInvoker = conditionalGetInvoker;
-	}
+    /**
+     * @return the getInvoker
+     */
+    public Invoker getGetInvoker() {
+        return getInvoker;
+    }
+
+    /**
+     * @param getInvoker the getInvoker to set
+     */
+    public void setGetInvoker(Invoker getInvoker) {
+        this.getInvoker = getInvoker;
+    }
+
+    /**
+     * @return the conditionalGetInvoker
+     */
+    public Invoker getConditionalGetInvoker() {
+        return conditionalGetInvoker;
+    }
+
+    /**
+     * @param conditionalGetInvoker the conditionalGetInvoker to set
+     */
+    public void setConditionalGetInvoker(Invoker conditionalGetInvoker) {
+        this.conditionalGetInvoker = conditionalGetInvoker;
+    }
+
+    /**
+     * @return the putInvoker
+     */
+    public Invoker getPutInvoker() {
+        return putInvoker;
+    }
+
+    /**
+     * @param putInvoker the putInvoker to set
+     */
+    public void setPutInvoker(Invoker putInvoker) {
+        this.putInvoker = putInvoker;
+    }
+
+    /**
+     * @return the conditionalPutInvoker
+     */
+    public Invoker getConditionalPutInvoker() {
+        return conditionalPutInvoker;
+    }
+
+    /**
+     * @param conditionalPutInvoker the conditionalPutInvoker to set
+     */
+    public void setConditionalPutInvoker(Invoker conditionalPutInvoker) {
+        this.conditionalPutInvoker = conditionalPutInvoker;
+    }
+
+    /**
+     * @return the postInvoker
+     */
+    public Invoker getPostInvoker() {
+        return postInvoker;
+    }
+
+    /**
+     * @param postInvoker the postInvoker to set
+     */
+    public void setPostInvoker(Invoker postInvoker) {
+        this.postInvoker = postInvoker;
+    }
+
+    /**
+     * @return the conditionalPostInvoker
+     */
+    public Invoker getConditionalPostInvoker() {
+        return conditionalPostInvoker;
+    }
+
+    /**
+     * @param conditionalPostInvoker the conditionalPostInvoker to set
+     */
+    public void setConditionalPostInvoker(Invoker conditionalPostInvoker) {
+        this.conditionalPostInvoker = conditionalPostInvoker;
+    }
+
+    /**
+     * @return the deleteInvoker
+     */
+    public Invoker getDeleteInvoker() {
+        return deleteInvoker;
+    }
+
+    /**
+     * @param deleteInvoker the deleteInvoker to set
+     */
+    public void setDeleteInvoker(Invoker deleteInvoker) {
+        this.deleteInvoker = deleteInvoker;
+    }
+
+    /**
+     * @return the conditionalDeleteInvoker
+     */
+    public Invoker getConditionalDeleteInvoker() {
+        return conditionalDeleteInvoker;
+    }
+
+    /**
+     * @param conditionalDeleteInvoker the conditionalDeleteInvoker to set
+     */
+    public void setConditionalDeleteInvoker(Invoker conditionalDeleteInvoker) {
+        this.conditionalDeleteInvoker = conditionalDeleteInvoker;
+    }
+
+    
+    /** 
+     * Utility Methods related to Policy
+     */
     
-	/**
-	 * @return the putInvoker
-	 */
-	public Invoker getPutInvoker() {
-		return putInvoker;
-	}
-
-	/**
-	 * @param putInvoker the putInvoker to set
-	 */
-	public void setPutInvoker(Invoker putInvoker) {
-		this.putInvoker = putInvoker;
-	}
-
-	/**
-	 * @return the conditionalPutInvoker
-	 */
-	public Invoker getConditionalPutInvoker() {
-		return conditionalPutInvoker;
-	}
-
-	/**
-	 * @param conditionalPutInvoker the conditionalPutInvoker to set
-	 */
-	public void setConditionalPutInvoker(Invoker conditionalPutInvoker) {
-		this.conditionalPutInvoker = conditionalPutInvoker;
-	}
-
-	/**
-	 * @return the postInvoker
-	 */
-	public Invoker getPostInvoker() {
-		return postInvoker;
-	}
-
-	/**
-	 * @param postInvoker the postInvoker to set
-	 */
-	public void setPostInvoker(Invoker postInvoker) {
-		this.postInvoker = postInvoker;
-	}
-
-	/**
-	 * @return the conditionalPostInvoker
-	 */
-	public Invoker getConditionalPostInvoker() {
-		return conditionalPostInvoker;
-	}
-
-	/**
-	 * @param conditionalPostInvoker the conditionalPostInvoker to set
-	 */
-	public void setConditionalPostInvoker(Invoker conditionalPostInvoker) {
-		this.conditionalPostInvoker = conditionalPostInvoker;
-	}
-
-	/**
-	 * @return the deleteInvoker
-	 */
-	public Invoker getDeleteInvoker() {
-		return deleteInvoker;
-	}
-
-	/**
-	 * @param deleteInvoker the deleteInvoker to set
-	 */
-	public void setDeleteInvoker(Invoker deleteInvoker) {
-		this.deleteInvoker = deleteInvoker;
-	}
-
-	/**
-	 * @return the conditionalDeleteInvoker
-	 */
-	public Invoker getConditionalDeleteInvoker() {
-		return conditionalDeleteInvoker;
-	}
-
-	/**
-	 * @param conditionalDeleteInvoker the conditionalDeleteInvoker to set
-	 */
-	public void setConditionalDeleteInvoker(Invoker conditionalDeleteInvoker) {
-		this.conditionalDeleteInvoker = conditionalDeleteInvoker;
-	}
+
+    private boolean hasAuthenticationHeader(HttpServletRequest request, ServletResponse response) {
+        boolean result = false;
+        if(request.getHeader("Authorization") != null) {
+            result = true;
+        }
+        
+        return result;
+    }
+
 
 }

Modified: tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceBindingProvider.java?rev=700368&r1=700367&r2=700368&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceBindingProvider.java (original)
+++ tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceBindingProvider.java Tue Sep 30 00:24:48 2008
@@ -39,10 +39,10 @@
  * @version $Rev$ $Date$
  */
 public class HTTPServiceBindingProvider implements ServiceBindingProvider {
-    
     private RuntimeComponentService service;  
     private HTTPBinding binding;
     private MessageFactory messageFactory;
+    
     private ServletHost servletHost;
     private String servletMapping;
     private HTTPBindingListenerServlet bindingListenerServlet;
@@ -63,7 +63,7 @@
         RuntimeComponentService componentService = (RuntimeComponentService) service;
         RuntimeWire wire = componentService.getRuntimeWire(binding);
         Servlet servlet = null;
-        bindingListenerServlet = new HTTPBindingListenerServlet( messageFactory );
+        bindingListenerServlet = new HTTPBindingListenerServlet(binding, messageFactory );
         for (InvocationChain invocationChain : wire.getInvocationChains()) {
             Operation operation = invocationChain.getTargetOperation();
             String operationName = operation.getName();
@@ -101,7 +101,7 @@
                 servlet = bindingListenerServlet;
             } else if (operationName.equals("service")) {
                 Invoker serviceInvoker = invocationChain.getHeadInvoker();
-                servlet = new HTTPServiceListenerServlet(serviceInvoker, messageFactory);
+                servlet = new HTTPServiceListenerServlet(binding, serviceInvoker, messageFactory);
                 break;
             }
         }

Modified: tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceListenerServlet.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceListenerServlet.java?rev=700368&r1=700367&r2=700368&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceListenerServlet.java (original)
+++ tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/provider/HTTPServiceListenerServlet.java Tue Sep 30 00:24:48 2008
@@ -20,17 +20,25 @@
 package org.apache.tuscany.sca.binding.http.provider;
 
 import java.io.IOException;
+import java.util.List;
 
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
 
+import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.policy.Intent;
+import org.apache.tuscany.sca.policy.PolicySet;
+import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
+import org.apache.tuscany.sca.policy.authentication.basic.BasicAuthenticationPolicy;
 
 /**
  * Servlet responsible for dispatching HTTP service requests to the
@@ -39,17 +47,45 @@
  * @version $Rev$ $Date$
  */
 public class HTTPServiceListenerServlet implements Servlet {
+    private static final QName AUTEHTICATION_INTENT = new QName("http://www.osoa.org/xmlns/sca/1.0","authentication");
     
-    private ServletConfig config;
-    private MessageFactory messageFactory;
-    private Invoker serviceInvoker;
+    transient private Binding binding;
+    transient private ServletConfig config;
+    transient private MessageFactory messageFactory;
+    transient private Invoker serviceInvoker;
     
+    transient private boolean requiresAuthentication = false;
+    transient private BasicAuthenticationPolicy basicAuthenticationPolicy = null;
+
     /**
      * Constructs a new HTTPServiceListenerServlet.
      */
-    public HTTPServiceListenerServlet(Invoker serviceInvoker, MessageFactory messageFactory) {
+    public HTTPServiceListenerServlet(Binding binding, Invoker serviceInvoker, MessageFactory messageFactory) {
+        this.binding = binding;
         this.serviceInvoker = serviceInvoker;
         this.messageFactory = messageFactory;
+        
+        // find out which policies are active
+        if (binding instanceof PolicySetAttachPoint) {
+            List<Intent> intents = ((PolicySetAttachPoint)binding).getRequiredIntents();
+            for(Intent intent : intents) {
+                if(intent.getName().equals(AUTEHTICATION_INTENT)) {
+                    requiresAuthentication = true;
+                }
+            }
+
+
+            List<PolicySet> policySets = ((PolicySetAttachPoint)binding).getApplicablePolicySets();
+            for (PolicySet ps : policySets) {
+                for (Object p : ps.getPolicies()) {
+                    if (BasicAuthenticationPolicy.class.isInstance(p)) {
+                        basicAuthenticationPolicy = (BasicAuthenticationPolicy)p;
+                    } else {
+                        // etc. check for other types of policy being present
+                    }
+                }
+            }
+        }        
     }
 
     public ServletConfig getServletConfig() {
@@ -65,10 +101,17 @@
     }
 
     public void destroy() {
+        
     }
 
     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
         
+        if(requiresAuthentication) {
+            if(! hasAuthenticationHeader((HttpServletRequest)request, (HttpServletResponse)response)) {
+                ((HttpServletResponse)response).sendError(HttpServletResponse.SC_UNAUTHORIZED);
+            }
+        }
+        
         // Dispatch the service interaction to the service invoker
         Message requestMessage = messageFactory.createMessage();
         requestMessage.setBody(new Object[]{request, response});
@@ -81,4 +124,13 @@
         }
     }
 
+    
+    private boolean hasAuthenticationHeader(HttpServletRequest request, ServletResponse response) {
+        boolean result = false;
+        if(request.getHeader("Authorization") != null) {
+            result = true;
+        }
+        
+        return result;
+    }
 }

Added: tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/HTTPHeadersParser.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/HTTPHeadersParser.java?rev=700368&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/HTTPHeadersParser.java (added)
+++ tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/HTTPHeadersParser.java Tue Sep 30 00:24:48 2008
@@ -0,0 +1,50 @@
+/*
+ * 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.tuscany.sca.binding.http.util;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.tuscany.sca.binding.http.HTTPHeader;
+
+public class HTTPHeadersParser {
+
+	/**
+	 * Parse http request headers to a map
+	 * 
+	 * @param request
+	 * @return
+	 */
+	public static List<HTTPHeader> getHeaders(HttpServletRequest request) {
+		List<HTTPHeader> headers = new ArrayList<HTTPHeader>();
+
+		Enumeration<?> headerNames =  request.getHeaderNames();
+		while (headerNames.hasMoreElements()) {
+		    String headerName = (String) headerNames.nextElement();
+		    Object headerValue = request.getHeader(headerName);
+		    HTTPHeader header = new HTTPHeader(headerName, headerValue);
+		    headers.add(header);
+		}
+		return headers;
+	}
+}

Propchange: tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/HTTPHeadersParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/java/sca/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/util/HTTPHeadersParser.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: tuscany/java/sca/modules/binding-http-runtime/src/test/java/org/apache/tuscany/sca/binding/http/TestBindingCacheImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-http-runtime/src/test/java/org/apache/tuscany/sca/binding/http/TestBindingCacheImpl.java?rev=700368&r1=700367&r2=700368&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-http-runtime/src/test/java/org/apache/tuscany/sca/binding/http/TestBindingCacheImpl.java (original)
+++ tuscany/java/sca/modules/binding-http-runtime/src/test/java/org/apache/tuscany/sca/binding/http/TestBindingCacheImpl.java Tue Sep 30 00:24:48 2008
@@ -49,7 +49,7 @@
 	 * @param id
 	 * @return
 	 */
-	public InputStream conditionalGet(String id, CacheContext cacheContext)
+	public InputStream conditionalGet(String id, HTTPCacheContext cacheContext)
 			throws NotModifiedException, PreconditionFailedException {
 
 		if (cacheContext != null) {
@@ -99,7 +99,7 @@
 	 * @param id
 	 * @return
 	 */
-	public InputStream conditionalDelete(String id, CacheContext cacheContext)
+	public InputStream conditionalDelete(String id, HTTPCacheContext cacheContext)
 			throws NotModifiedException, PreconditionFailedException {
 
 		if (cacheContext != null) {
@@ -151,7 +151,7 @@
 	 * @param id
 	 * @return
 	 */
-	public CacheContext conditionalPost(CacheContext cacheContext)
+	public HTTPCacheContext conditionalPost(HTTPCacheContext cacheContext)
 			throws NotModifiedException, PreconditionFailedException {
 		String id = "" + (new java.util.Random()).nextInt(Integer.MAX_VALUE);
 
@@ -180,7 +180,7 @@
 		}
 
 		// Return the ETag and LastModfied fields by serialize to a byte array
-		CacheContext returnContext = new CacheContext();
+		HTTPCacheContext returnContext = new HTTPCacheContext();
 		returnContext.setETag( "ETag" + (new java.util.Random()).nextInt(Integer.MAX_VALUE) );
 		returnContext.setLastModified( new Date() );
 		return returnContext;
@@ -202,7 +202,7 @@
 	 * @param id
 	 * @return
 	 */
-	public InputStream conditionalPut(String id, CacheContext cacheContext)
+	public InputStream conditionalPut(String id, HTTPCacheContext cacheContext)
 			throws NotModifiedException, PreconditionFailedException {
 
 		if (cacheContext != null) {

Copied: tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java (from r699548, tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/CacheContext.java)
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java?p2=tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java&p1=tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/CacheContext.java&r1=699548&r2=700368&rev=700368&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/CacheContext.java (original)
+++ tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPCacheContext.java Tue Sep 30 00:24:48 2008
@@ -36,7 +36,7 @@
  * If-Modified-Since, If-Unmodified-Since, If-Range.
 
  */
-public class CacheContext {
+public class HTTPCacheContext {
     public static final SimpleDateFormat RFC822DateFormat = new SimpleDateFormat( "EEE, dd MMM yyyy HH:mm:ss Z" ); // RFC 822 date time
     
     public boolean enabled;
@@ -211,8 +211,8 @@
      * @param request
      * @return
      */
-    public static CacheContext getCacheContextFromRequest( HttpServletRequest request ) throws java.text.ParseException {
-    	CacheContext context = new CacheContext();
+    public static HTTPCacheContext getCacheContextFromRequest( HttpServletRequest request ) throws java.text.ParseException {
+    	HTTPCacheContext context = new HTTPCacheContext();
     	
     	String eTag = request.getHeader( "If-Match" );    	
     	if ( eTag != null ) {

Added: tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPHeader.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPHeader.java?rev=700368&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPHeader.java (added)
+++ tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPHeader.java Tue Sep 30 00:24:48 2008
@@ -0,0 +1,51 @@
+/*
+ * 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.tuscany.sca.binding.http;
+
+public class HTTPHeader {
+    private String name;
+    private Object value;
+    
+    public HTTPHeader() {
+        
+    }
+    
+    public HTTPHeader(String name, Object value) {
+        this.name = name;
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+}

Propchange: tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPHeader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/java/sca/modules/binding-http/src/main/java/org/apache/tuscany/sca/binding/http/HTTPHeader.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date