You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/08/27 21:15:33 UTC

svn commit: r689572 - in /cxf/trunk: bin/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/ rt/frontend/jaxws/src/main/java/...

Author: dkulp
Date: Wed Aug 27 12:15:32 2008
New Revision: 689572

URL: http://svn.apache.org/viewvc?rev=689572&view=rev
Log:
Performance improvement by not mapping the jaxws properties back and forth all the time.  Wrapper the message directly and map on get/put.

Removed:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ContextPropertiesMapping.java
Modified:
    cxf/trunk/bin/DoMerges.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/BindingProviderImpl.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/DispatchLogicalHandlerInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/DispatchSOAPHandlerInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
    cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java
    cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ContextPropertiesMappingTest.java

Modified: cxf/trunk/bin/DoMerges.java
URL: http://svn.apache.org/viewvc/cxf/trunk/bin/DoMerges.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/bin/DoMerges.java (original)
+++ cxf/trunk/bin/DoMerges.java Wed Aug 27 12:15:32 2008
@@ -58,7 +58,11 @@
         if (c == 'N') {
             return;
         }
-        Process p = Runtime.getRuntime().exec(new String[] {"svn", "commit", "-F", "svnmerge-commit-message.txt"});
+        Process p = Runtime.getRuntime().exec(new String[] {"svn", "resolved", "."});
+        if (p.waitFor() != 0) {
+            Thread.sleep(10);
+        }
+        p = Runtime.getRuntime().exec(new String[] {"svn", "commit", "-F", "svnmerge-commit-message.txt"});
         BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
         String line = reader.readLine();
         while (line != null) {

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/BindingProviderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/BindingProviderImpl.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/BindingProviderImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/BindingProviderImpl.java Wed Aug 27 12:15:32 2008
@@ -27,7 +27,9 @@
 import javax.xml.ws.BindingProvider;
 import javax.xml.ws.EndpointReference;
 import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
 
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
 
 public class BindingProviderImpl implements BindingProvider {
@@ -62,7 +64,9 @@
 
     public Map<String, Object> getResponseContext() {
         if (null == responseContext.get()) {
-            responseContext.set(new HashMap<String, Object>());
+            responseContext.set(new WrappedMessageContext(new HashMap<String, Object>(),
+                                                          null,
+                                                          Scope.APPLICATION));
         }
         return responseContext.get();
     }

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java Wed Aug 27 12:15:32 2008
@@ -48,6 +48,7 @@
 import javax.xml.ws.Response;
 import javax.xml.ws.Service;
 import javax.xml.ws.WebServiceException;
+import javax.xml.ws.handler.MessageContext.Scope;
 import javax.xml.ws.http.HTTPBinding;
 import javax.xml.ws.http.HTTPException;
 import javax.xml.ws.soap.SOAPBinding;
@@ -66,11 +67,11 @@
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.interceptor.InterceptorProvider;
 import org.apache.cxf.interceptor.MessageSenderInterceptor;
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.jaxws.handler.logical.DispatchLogicalHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.soap.DispatchSOAPHandlerInterceptor;
 import org.apache.cxf.jaxws.interceptors.DispatchInDatabindingInterceptor;
 import org.apache.cxf.jaxws.interceptors.DispatchOutDatabindingInterceptor;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
@@ -140,14 +141,17 @@
             }
             
             
-            Map<String, Object> reqContext = new HashMap<String, Object>(this.getRequestContext());
+            Map<String, Object> reqContext = new HashMap<String, Object>();
+            WrappedMessageContext ctx = new WrappedMessageContext(reqContext,
+                                                                  null,
+                                                                  Scope.APPLICATION);
+            ctx.putAll(this.getRequestContext());
             Map<String, Object> respContext = this.getResponseContext();
             // clear the response context's hold information
             // Not call the clear Context is to avoid the error 
             // that getResponseContext() would be called by Client code first
             respContext.clear();
             
-            ContextPropertiesMapping.mapRequestfromJaxws2Cxf(reqContext);
             message.putAll(reqContext);
             //need to do context mapping from jax-ws to cxf message
             
@@ -220,8 +224,6 @@
                     Message inMsg = waitResponse(exchange);
                     respContext.putAll(inMsg);
                     getConduitSelector().complete(exchange);
-                    //need to do context mapping from cxf message to jax-ws 
-                    ContextPropertiesMapping.mapResponsefromCxf2Jaxws(respContext);
                     return cl.cast(inMsg.getContent(Object.class));
                 }
             }

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java Wed Aug 27 12:15:32 2008
@@ -20,21 +20,30 @@
 package org.apache.cxf.jaxws;
 
 import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import javax.activation.DataHandler;
 import javax.xml.ws.handler.MessageContext;
 import javax.xml.ws.handler.MessageContext.Scope;
 import javax.xml.ws.soap.SOAPFaultException;
 
+import org.apache.cxf.attachment.AttachmentImpl;
 import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.headers.Header;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxws.context.WebServiceContextImpl;
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
+import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
 import org.apache.cxf.service.invoker.Factory;
 import org.apache.cxf.service.invoker.FactoryInvoker;
 import org.apache.cxf.service.invoker.SingletonFactory;
@@ -75,8 +84,7 @@
     
     protected Object invoke(Exchange exchange, final Object serviceObject, Method m, List<Object> params) {
         // set up the webservice request context 
-        MessageContext ctx = 
-            ContextPropertiesMapping.createWebServiceContext(exchange);
+        WrappedMessageContext ctx = new WrappedMessageContext(exchange.getInMessage(), Scope.APPLICATION);
         
         Map<String, Scope> scopes = CastUtils.cast((Map<?, ?>)ctx.get(WrappedMessageContext.SCOPES));
         Map<String, Object> handlerScopedStuff = new HashMap<String, Object>();
@@ -97,14 +105,70 @@
         List<Object> res = CastUtils.cast((List)super.invoke(exchange, serviceObject, m, params));
         
         for (Map.Entry<String, Object> key : handlerScopedStuff.entrySet()) {
-            ctx.put(key.getKey(), key.getValue());
-            ctx.setScope(key.getKey(), Scope.HANDLER);
+            ctx.put(key.getKey(), key.getValue(), Scope.HANDLER);
         }
                 
         //update the webservice response context
-        ContextPropertiesMapping.updateWebServiceContext(exchange, ctx);
+        updateWebServiceContext(exchange, ctx);
         //clear the WebServiceContextImpl's ThreadLocal variable
         WebServiceContextImpl.clear();
         return res;
     }
+    
+    
+    private Message createResponseMessage(Exchange exchange) {
+        if (exchange == null) {
+            return null;
+        }
+        Message m = exchange.getOutMessage();
+        if (m == null && !exchange.isOneWay()) {
+            Endpoint ep = exchange.get(Endpoint.class);
+            m = ep.getBinding().createMessage();
+            exchange.setOutMessage(m);
+        }
+        return m;
+    }
+
+    private void updateWebServiceContext(Exchange exchange, MessageContext ctx) {
+        // Guard against wrong type associated with header list.
+        // Need to copy header only if the message is going out.
+        if (ctx.containsKey(Header.HEADER_LIST) 
+                && ctx.get(Header.HEADER_LIST) instanceof List<?>) {
+            List list = (List) ctx.get(Header.HEADER_LIST);
+            if (list != null && !list.isEmpty()) {
+                SoapMessage sm = (SoapMessage) createResponseMessage(exchange);
+                Iterator iter = list.iterator();
+                while (iter.hasNext()) {
+                    sm.getHeaders().add((Header) iter.next());
+                }
+            }
+        }
+        if (exchange.getOutMessage() != null) {
+            Message out = exchange.getOutMessage();
+            if (out.containsKey(Message.PROTOCOL_HEADERS)) {
+                Map<String, List<String>> heads = CastUtils
+                    .cast((Map<?, ?>)exchange.getOutMessage().get(Message.PROTOCOL_HEADERS));
+                if (heads.containsKey("Content-Type")) {
+                    List<String> ct = heads.get("Content-Type");
+                    exchange.getOutMessage().put(Message.CONTENT_TYPE, ct.get(0));
+                    heads.remove("Content-Type");
+                }
+            }
+            Map<String, DataHandler> dataHandlers  
+                = CastUtils.cast((Map<?, ?>)out.get(MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS));
+            if (dataHandlers != null && !dataHandlers.isEmpty()) {
+                Collection<Attachment> attachments = out.getAttachments();
+                if (attachments == null) {
+                    attachments = new ArrayList<Attachment>();
+                    out.setAttachments(attachments);
+                }
+                for (Map.Entry<String, DataHandler> entry : dataHandlers.entrySet()) {
+                    Attachment att = new AttachmentImpl(entry.getKey(), entry.getValue());
+                    attachments.add(att);
+                }
+            }
+            out.remove(MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS);
+        }
+    }
+
 }

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java Wed Aug 27 12:15:32 2008
@@ -55,7 +55,6 @@
 import org.apache.cxf.frontend.MethodDispatcher;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
 import org.apache.cxf.service.model.BindingOperationInfo;
 
@@ -160,9 +159,6 @@
         
         Map<String, Object> context = new HashMap<String, Object>();
 
-        // need to do context mapping from jax-ws to cxf message
-        ContextPropertiesMapping.mapRequestfromJaxws2Cxf(reqContext);
-
         context.put(Client.REQUEST_CONTEXT, reqContext);
         context.put(Client.RESPONSE_CONTEXT, respContext);
        
@@ -208,8 +204,6 @@
             }
         }
         
-        // need to do context mapping from cxf message to jax-ws
-        ContextPropertiesMapping.mapResponsefromCxf2Jaxws(respContext);
         Map<String, Scope> scopes = CastUtils.cast((Map<?, ?>)respContext.get(WrappedMessageContext.SCOPES));
         if (scopes != null) {
             for (Map.Entry<String, Scope> scope : scopes.entrySet()) {
@@ -314,6 +308,7 @@
     private Map<String, Object> getRequestContextCopy() {
         Map<String, Object> realMap = new HashMap<String, Object>();
         WrappedMessageContext ctx = new WrappedMessageContext(realMap,
+                                                              null,
                                                               Scope.APPLICATION);
         // thread local contexts reflect currentRequestContext as of 
         // last call to getRequestContext()
@@ -338,7 +333,9 @@
 
     public Map<String, Object> getResponseContext() {
         if (null == responseContext.get()) {
-            responseContext.set(new HashMap<String, Object>());
+            responseContext.set(new WrappedMessageContext(new HashMap<String, Object>(),
+                                                          null,
+                                                          Scope.APPLICATION));
         }        
         return responseContext.get();
     }

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java Wed Aug 27 12:15:32 2008
@@ -20,124 +20,354 @@
 package org.apache.cxf.jaxws.context;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 
+import javax.activation.DataHandler;
+import javax.xml.ws.BindingProvider;
 import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
 
+import org.apache.cxf.attachment.LazyAttachmentCollection;
+import org.apache.cxf.binding.soap.SoapBindingConstants;
+import org.apache.cxf.configuration.security.AuthorizationPolicy;
+import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 
 public class WrappedMessageContext implements MessageContext {
     public static final String SCOPES = WrappedMessageContext.class.getName() + ".SCOPES";
     
-    private final Map<String, Object> contextMap;
-    private final Message message;
+    private static Map<String, String> cxf2jaxwsMap = new HashMap<String, String>();
+    private static Map<String, String> jaxws2cxfMap = new HashMap<String, String>();
+    
+    static {
+        cxf2jaxwsMap.put(Message.ENDPOINT_ADDRESS, 
+                          BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
+        cxf2jaxwsMap.put(Message.MAINTAIN_SESSION,
+                         BindingProvider.SESSION_MAINTAIN_PROPERTY);
+        
+        cxf2jaxwsMap.put(Message.HTTP_REQUEST_METHOD,
+                          MessageContext.HTTP_REQUEST_METHOD);
+        cxf2jaxwsMap.put(Message.RESPONSE_CODE, 
+                          MessageContext.HTTP_RESPONSE_CODE);        
+        cxf2jaxwsMap.put(Message.PATH_INFO, 
+                          MessageContext.PATH_INFO);
+        cxf2jaxwsMap.put(Message.QUERY_STRING, 
+                          MessageContext.QUERY_STRING);
+        cxf2jaxwsMap.put("HTTP.REQUEST", 
+                         MessageContext.SERVLET_REQUEST);
+        cxf2jaxwsMap.put("HTTP.RESPONSE", 
+                         MessageContext.SERVLET_RESPONSE);
+        cxf2jaxwsMap.put("HTTP.CONTEXT", 
+                         MessageContext.SERVLET_CONTEXT);
+       
+        jaxws2cxfMap.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
+                         Message.ENDPOINT_ADDRESS);
+        jaxws2cxfMap.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, 
+                         Message.MAINTAIN_SESSION);
+                
+        jaxws2cxfMap.put(MessageContext.HTTP_REQUEST_METHOD,
+                         Message.HTTP_REQUEST_METHOD);
+        jaxws2cxfMap.put(MessageContext.HTTP_RESPONSE_CODE,
+                         Message.RESPONSE_CODE);        
+        jaxws2cxfMap.put(MessageContext.PATH_INFO,
+                         Message.PATH_INFO);
+        jaxws2cxfMap.put(MessageContext.QUERY_STRING,
+                         Message.QUERY_STRING);
+        
+        jaxws2cxfMap.put(MessageContext.SERVLET_REQUEST, 
+                         "HTTP.REQUEST"); 
+        jaxws2cxfMap.put(MessageContext.SERVLET_RESPONSE, 
+                         "HTTP.RESPONSE");
+        jaxws2cxfMap.put(MessageContext.SERVLET_CONTEXT, 
+                        "HTTP.CONTEXT");
+        
+        jaxws2cxfMap.put(BindingProvider.SOAPACTION_URI_PROPERTY, SoapBindingConstants.SOAP_ACTION);
+    }
+
+    private final Map<String, Object> message;
+    private final Map<String, Object> reqMessage;
+    private final Exchange exchange;
     private Map<String, Scope> scopes;
     private Scope defaultScope;
 
     public WrappedMessageContext(Message m) {
-        this(m, m, Scope.HANDLER);
+        this(m, Scope.HANDLER);
     }
     public WrappedMessageContext(Message m, Scope defScope) {
-        this(m, m, defScope);
-    }
-    
-    public WrappedMessageContext(Map<String, Object> m, Scope defScope) {
-        this(null, m, defScope);
-    }
-    
-    public WrappedMessageContext(Message m, Map<String, Object> map, Scope defScope) {
+        this(m, m.getExchange(), defScope);
+    }    
+    public WrappedMessageContext(Map<String, Object> m, Exchange ex, Scope defScope) {
         message = m;
-        contextMap = map;
+        exchange = ex;
         defaultScope = defScope;
-        scopes = CastUtils.cast((Map<?, ?>)contextMap.get(SCOPES));
-        if (scopes == null && message != null && message.getExchange() != null) { 
-            if (isRequestor() && !isOutbound() && m.getExchange().getOutMessage() != null) {
-                scopes = CastUtils.cast((Map<?, ?>)m.getExchange().getOutMessage().get(SCOPES));
-                copyScopedProperties(m.getExchange().getOutMessage());
-                m.put(SCOPES, scopes);
-            } else if (!isRequestor() && isOutbound() && m.getExchange().getInMessage() != null) {
-                scopes = CastUtils.cast((Map<?, ?>)m.getExchange().getInMessage().get(SCOPES));
-                copyScopedProperties(m.getExchange().getInMessage());
-                m.put(SCOPES, scopes);
+        scopes = CastUtils.cast((Map<?, ?>)message.get(SCOPES));
+        
+        if (isResponse() && exchange != null) {
+            if (isRequestor()) {
+                reqMessage = exchange.getOutMessage();
+            } else {
+                reqMessage = exchange.getInMessage();
             }
+        } else {
+            reqMessage = null;
+        }
+        
+        if (scopes == null && reqMessage != null) {
+            scopes = CastUtils.cast((Map<?, ?>)reqMessage.get(SCOPES));
+            m.put(SCOPES, scopes);
+            copyScoped(message);
         }
         if (scopes == null) {
             scopes = new HashMap<String, Scope>();
-            contextMap.put(SCOPES, scopes);
+            message.put(SCOPES, scopes);
+        }
+    }
+    private void copyScoped(Map<String, Object> msg) {
+        for (String s : scopes.keySet()) {
+            message.put(s, msg.get(s));
         }
     }
     
-    protected final void copyScopedProperties(Message m) {
-        for (String k : scopes.keySet()) {
-            if (!contextMap.containsKey(k)
-                && !MessageContext.MESSAGE_OUTBOUND_PROPERTY.equals(k)) {
-                contextMap.put(k, m.get(k));
-            }
+    private String mapKey(String key) {
+        String k2 = jaxws2cxfMap.get(key);
+        if (k2 != null) {
+            return k2;
         }
+        return key;
+    }
+    private String mapKeyReverse(String key) {
+        String k2 = cxf2jaxwsMap.get(key);
+        if (k2 != null) {
+            return k2;
+        }
+        if (Message.PROTOCOL_HEADERS.equals(key)) {
+            return isResponse() ? MessageContext.HTTP_RESPONSE_HEADERS : MessageContext.HTTP_REQUEST_HEADERS;
+        }
+        return key;
+    }
+    
+    
+    protected final boolean isResponse() {
+        return isOutbound() ^ isRequestor();
     }
     protected final boolean isRequestor() {
-        return Boolean.TRUE.equals(contextMap.containsKey(Message.REQUESTOR_ROLE));
+        return Boolean.TRUE.equals(message.containsKey(Message.REQUESTOR_ROLE));
     }
     protected final boolean isOutbound() {
-        Exchange ex = message.getExchange();
         return message != null 
-            && (message == ex.getOutMessage()
-                || message == ex.getOutFaultMessage());
+            && exchange != null
+            && (message == exchange.getOutMessage()
+                || message == exchange.getOutFaultMessage());
     }
     
     public final Message getWrappedMessage() {
-        return message;
+        return message instanceof Message ? (Message)message : null;
     }
     
     public void clear() {
-        contextMap.clear();      
+        //just clear the JAXWS things....
+        for (String key : jaxws2cxfMap.keySet()) {
+            remove(key);
+        }
     }
 
     public final boolean containsKey(Object key) {
-        return contextMap.containsKey(key);
+        return message.containsKey(mapKey((String)key));
     }
 
     public final boolean containsValue(Object value) {
-        return contextMap.containsValue(value);
+        return message.containsValue(value);
     }
 
-    public final Set<Entry<String, Object>> entrySet() {
-        return contextMap.entrySet();
+    public Object get(Object key) {
+        String mappedkey = mapKey((String)key);
+        Object ret = message.get(mappedkey);
+        if (ret == null) {
+            if (Message.class.getName().equals(mappedkey)) {
+                return message;
+            }
+            if (exchange != null) {
+                ret = exchange.get(mappedkey);
+                if (ret != null) {
+                    return ret;
+                }
+            }
+            if (MessageContext.INBOUND_MESSAGE_ATTACHMENTS.equals(key)) {
+                if (isOutbound()) {
+                    ret = reqMessage.get(key);
+                }
+                ret = createAttachments(getWrappedMessage(), MessageContext.INBOUND_MESSAGE_ATTACHMENTS);
+            } else if (MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS.equals(key)) {
+                ret = createAttachments(createResponseMessage(), MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS);
+            } else if (MessageContext.MESSAGE_OUTBOUND_PROPERTY.equals(key)) {
+                ret = isOutbound();
+            } else if (MessageContext.HTTP_REQUEST_HEADERS.equals(key)) {
+                if (!isResponse()) {
+                    ret = message.get(Message.PROTOCOL_HEADERS);
+                } else if (reqMessage != null && !isRequestor()) {
+                    ret = reqMessage.get(Message.PROTOCOL_HEADERS);
+                }
+            } else if (MessageContext.HTTP_RESPONSE_HEADERS.equals(key)) {
+                Map mp = null;
+                if (isResponse()) {
+                    mp = (Map)message.get(Message.PROTOCOL_HEADERS);
+                } else if (exchange != null) {
+                    //may have to create the out message and add the headers
+                    Message tmp = createResponseMessage();
+                    if (tmp != null) {
+                        ret = (Map)tmp.get(Message.PROTOCOL_HEADERS);
+                    }
+                }
+                ret = mp;
+            } else if (BindingProvider.USERNAME_PROPERTY.equals(key)) {
+                AuthorizationPolicy authPolicy =
+                    (AuthorizationPolicy)message.get(AuthorizationPolicy.class.getName());
+                if (authPolicy != null) {
+                    ret = authPolicy.getUserName();
+                }
+            } else if (BindingProvider.PASSWORD_PROPERTY.equals(key)) {
+                AuthorizationPolicy authPolicy =
+                    (AuthorizationPolicy)message.get(AuthorizationPolicy.class.getName());
+                if (authPolicy != null) {
+                    ret = authPolicy.getPassword();
+                }
+            }
+            
+            if (ret == null && reqMessage != null) { 
+                ret = reqMessage.get(mappedkey);
+            }
+        }
+        return ret;
     }
 
-    public final Object get(Object key) {
-        Object ret = contextMap.get(key);
-        if (ret == null
-            && Message.class.getName().equals(key)) {
-            return message;
+    private Message createResponseMessage() {
+        if (exchange == null || isRequestor()) {
+            return null;
         }
-        return ret;
+        Message m = exchange.getOutMessage();
+        if (m == null && !exchange.isOneWay()) {
+            Endpoint ep = exchange.get(Endpoint.class);
+            m = ep.getBinding().createMessage();
+            exchange.setOutMessage(m);
+        }
+        return m;
     }
+    private Object createAttachments(Message mc, String propertyName) {
 
+        Collection<Attachment> attachments = mc.getAttachments();
+        Map<String, DataHandler> dataHandlers = getDHMap(attachments);
+        mc.put(propertyName, 
+               dataHandlers);
+        scopes.put(propertyName, Scope.APPLICATION);
+        return dataHandlers;
+    }    
+    private static Map<String, DataHandler> getDHMap(Collection<Attachment> attachments) {
+        Map<String, DataHandler> dataHandlers = null;
+        if (attachments != null) {
+            if (attachments instanceof LazyAttachmentCollection) {
+                dataHandlers = ((LazyAttachmentCollection)attachments).createDataHandlerMap();
+            } else {
+                //preserve the order of iteration
+                dataHandlers = new LinkedHashMap<String, DataHandler>();
+                for (Attachment attachment : attachments) {
+                    dataHandlers.put(attachment.getId(), attachment.getDataHandler());
+                }
+            }
+        }
+        return dataHandlers == null ? new LinkedHashMap<String, DataHandler>() : dataHandlers;
+    }    
     public final boolean isEmpty() {
-        return contextMap.isEmpty();
+        return message.isEmpty();
     }
 
+    // map to jaxws
     public final Set<String> keySet() {
-        return contextMap.keySet();
+        Set<String> set = new HashSet<String>();
+        for (String s : message.keySet()) {
+            set.add(s);
+            set.add(mapKeyReverse(s));
+        }
+        return Collections.unmodifiableSet(set);
     }
+    public final Set<Entry<String, Object>> entrySet() {
+        Set<Entry<String, Object>> set = new HashSet<Entry<String, Object>>();
+        for (Map.Entry<String, Object> s : message.entrySet()) {
+            set.add(s);
+            
+            final String s2 = mapKeyReverse(s.getKey());
+            final Object o = s.getValue();
+            if (s2.equals(s.getKey())) {
+                Map.Entry<String, Object> entry = new Map.Entry<String, Object>() {
+                    public String getKey() {
+                        return s2;
+                    }
+                    public Object getValue() {
+                        return o;
+                    }
+                    public Object setValue(Object value) {
+                        throw new UnsupportedOperationException();
+                    }
+                };
+                set.add(entry);
+            }
+        }
+        return Collections.unmodifiableSet(set);
+    }
+
 
     public final Object put(String key, Object value) {
-        if (!MessageContext.MESSAGE_OUTBOUND_PROPERTY.equals(key)
-            && !scopes.containsKey(key)) {
-            scopes.put(key, defaultScope);
-        }
-        return contextMap.put(key, value);
+        return put(key, value, defaultScope);
     }
     public final Object put(String key, Object value, Scope scope) {
-        if (!MessageContext.MESSAGE_OUTBOUND_PROPERTY.equals(key)) {
-            scopes.put(key, scope);
+        String mappedKey = mapKey(key);
+        if (!MessageContext.MESSAGE_OUTBOUND_PROPERTY.equals(mappedKey)) {
+            scopes.put(mappedKey, scope);
+        }
+        if ((MessageContext.HTTP_RESPONSE_HEADERS.equals(key)
+            || MessageContext.HTTP_RESPONSE_CODE.equals(key)
+            || MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS.equals(key)
+            || MessageContext.HTTP_RESPONSE_CODE.equals(key))
+            && !isResponse() && !isRequestor()) { 
+            Message tmp = createResponseMessage();
+            if (tmp != null) {
+                if (MessageContext.HTTP_RESPONSE_HEADERS.equals(key)) {
+                    return tmp.put(Message.PROTOCOL_HEADERS, value);
+                } else {
+                    return tmp.put(mappedKey, value);
+                }
+            }
+            return null;
+        } else if (BindingProvider.USERNAME_PROPERTY.equals(key)) {
+            AuthorizationPolicy authPolicy =
+                (AuthorizationPolicy)message.get(AuthorizationPolicy.class.getName());
+            if (authPolicy == null) {
+                authPolicy = new AuthorizationPolicy();
+                message.put(AuthorizationPolicy.class.getName(), authPolicy);
+            }
+            String ret = authPolicy.getUserName();
+            authPolicy.setUserName((String)value);
+            return ret;
+        } else if (BindingProvider.PASSWORD_PROPERTY.equals(key)) {
+            AuthorizationPolicy authPolicy =
+                (AuthorizationPolicy)message.get(AuthorizationPolicy.class.getName());
+            if (authPolicy == null) {
+                authPolicy = new AuthorizationPolicy();
+                message.put(AuthorizationPolicy.class.getName(), authPolicy);
+            }
+            String ret = authPolicy.getPassword();
+            authPolicy.setPassword((String)value);
+            return ret;
+        } else {
+            return message.put(mappedKey, value);
         }
-        return contextMap.put(key, value);
     }
 
     public final void putAll(Map<? extends String, ? extends Object> t) {
@@ -147,16 +377,17 @@
     }
 
     public final Object remove(Object key) {
+        key = mapKey((String)key);
         scopes.remove(key);
-        return contextMap.remove(key);
+        return message.remove(key);
     }
 
     public final int size() {
-        return contextMap.size();
+        return message.size();
     }
 
     public final Collection<Object> values() {
-        return contextMap.values();
+        return message.values();
     }
 
     public final void setScope(String key, Scope arg1) {

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java Wed Aug 27 12:15:32 2008
@@ -120,24 +120,18 @@
     }
 
     public boolean invokeLogicalHandlers(boolean requestor, LogicalMessageContext context) {
-        context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
         return invokeHandlerChain(logicalHandlers, context);
     }
 
     public boolean invokeLogicalHandlersHandleFault(boolean requestor, LogicalMessageContext context) {
-        context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
         return invokeHandlerChainHandleFault(logicalHandlers, context);
     }
 
     public boolean invokeProtocolHandlers(boolean requestor, MessageContext context) {
-        context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
-
         return invokeHandlerChain(protocolHandlers, context);
     }
 
     public boolean invokeProtocolHandlersHandleFault(boolean requestor, MessageContext context) {
-        context.put(MessageContext.MESSAGE_OUTBOUND_PROPERTY, isOutbound());
-
         return invokeHandlerChainHandleFault(protocolHandlers, context);
     }
 
@@ -248,7 +242,6 @@
         if (LOG.isLoggable(Level.FINE)) {
             LOG.log(Level.FINE, "invoking handlers, direction: " + (outbound ? "outbound" : "inbound"));
         }
-        setMessageOutboundProperty(ctx);
 
         if (!outbound) {
             handlerChain = reverseHandlerChain(handlerChain);

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/DispatchLogicalHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/DispatchLogicalHandlerInterceptor.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/DispatchLogicalHandlerInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/DispatchLogicalHandlerInterceptor.java Wed Aug 27 12:15:32 2008
@@ -25,7 +25,6 @@
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxws.handler.AbstractJAXWSHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.phase.PhaseInterceptorChain;
@@ -51,9 +50,7 @@
         LogicalMessageContextImpl lctx = new LogicalMessageContextImpl(message);
         invoker.setLogicalMessageContext(lctx);
         boolean requestor = isRequestor(message);
-        
-        ContextPropertiesMapping.mapCxf2Jaxws(message.getExchange(), lctx, requestor);          
-        
+
         if (!invoker.invokeLogicalHandlers(requestor, lctx) && requestor) {
             if (isOutbound(message)) {
                 // client side outbound - the request message becomes the

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerInInterceptor.java Wed Aug 27 12:15:32 2008
@@ -33,7 +33,6 @@
 import org.apache.cxf.jaxws.handler.AbstractJAXWSHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
 import org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
@@ -63,7 +62,6 @@
             setupBindingOperationInfo(message.getExchange(), lctx);
         }
         
-        ContextPropertiesMapping.mapCxf2Jaxws(message.getExchange(), lctx, requestor);
         if (!invoker.invokeLogicalHandlers(requestor, lctx)) {
             if (!requestor) {
                 //server side 

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalHandlerOutInterceptor.java Wed Aug 27 12:15:32 2008
@@ -36,7 +36,6 @@
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxws.handler.AbstractJAXWSHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.phase.PhaseInterceptorChain;
@@ -106,8 +105,6 @@
             invoker.setLogicalMessageContext(lctx);
             boolean requestor = isRequestor(message);
             
-            ContextPropertiesMapping.mapCxf2Jaxws(message.getExchange(), lctx, requestor);
-            
             
             XMLStreamReader reader = (XMLStreamReader)message.get("LogicalHandlerInterceptor.INREADER");
             SOAPMessage origMessage = null;

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java Wed Aug 27 12:15:32 2008
@@ -19,8 +19,11 @@
 
 package org.apache.cxf.jaxws.handler.logical;
 
+import java.util.Map;
+
 import javax.xml.ws.LogicalMessage;
 import javax.xml.ws.handler.LogicalMessageContext;
+import javax.xml.ws.handler.MessageContext;
 
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.message.Message;
@@ -35,5 +38,25 @@
     public LogicalMessage getMessage() {
         return new LogicalMessageImpl(this);
     }
+    
+    public Object get(Object key) {
+        Object o = super.get(key);
+        if (MessageContext.HTTP_RESPONSE_HEADERS.equals(key)
+            || MessageContext.HTTP_REQUEST_HEADERS.equals(key)) {
+            Map mp = (Map)o;
+            if (mp != null) {
+                if (mp.isEmpty()) {
+                    return null;
+                }
+                if (!isResponse() && MessageContext.HTTP_RESPONSE_HEADERS.equals(key)) {
+                    return null;
+                }
+                if (isRequestor() && MessageContext.HTTP_REQUEST_HEADERS.equals(key)) {
+                    return null;
+                }
+            }
+        }
+        return o;
+    }
 
 }

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/DispatchSOAPHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/DispatchSOAPHandlerInterceptor.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/DispatchSOAPHandlerInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/DispatchSOAPHandlerInterceptor.java Wed Aug 27 12:15:32 2008
@@ -37,7 +37,6 @@
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxws.handler.AbstractProtocolHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.phase.PhaseInterceptorChain;
@@ -125,10 +124,7 @@
     
     @Override
     protected MessageContext createProtocolMessageContext(SoapMessage message) {
-        SOAPMessageContextImpl sm = new SOAPMessageContextImpl(message);
-        boolean requestor = isRequestor(message);
-        ContextPropertiesMapping.mapCxf2Jaxws(message.getExchange(), sm, requestor);
-        return sm;
+        return new SOAPMessageContextImpl(message);
     }
 
     public void handleFault(SoapMessage message) {

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java Wed Aug 27 12:15:32 2008
@@ -56,7 +56,6 @@
 import org.apache.cxf.interceptor.OutgoingChainInterceptor;
 import org.apache.cxf.jaxws.handler.AbstractProtocolHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.HandlerChainInvoker;
-import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
@@ -230,8 +229,6 @@
     protected MessageContext createProtocolMessageContext(SoapMessage message) {
         SOAPMessageContextImpl sm = new SOAPMessageContextImpl(message);
         
-        boolean requestor = isRequestor(message);
-        ContextPropertiesMapping.mapCxf2Jaxws(message.getExchange(), sm, requestor);
         Exchange exch = message.getExchange();
         setupBindingOperationInfo(exch, sm);
         SOAPMessage msg = sm.getMessage();

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java Wed Aug 27 12:15:32 2008
@@ -24,6 +24,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.xml.bind.JAXBContext;
@@ -117,5 +118,25 @@
     private SoapMessage getWrappedSoapMessage() {
         return (SoapMessage)getWrappedMessage();
     }
+    
+    public Object get(Object key) {
+        Object o = super.get(key);
+        if (MessageContext.HTTP_RESPONSE_HEADERS.equals(key)
+            || MessageContext.HTTP_REQUEST_HEADERS.equals(key)) {
+            Map mp = (Map)o;
+            if (mp != null) {
+                if (mp.isEmpty()) {
+                    return null;
+                }
+                if (!isRequestor() && isOutbound() && MessageContext.HTTP_RESPONSE_HEADERS.equals(key)) {
+                    return null;
+                }
+                if (isRequestor() && isOutbound() && MessageContext.HTTP_REQUEST_HEADERS.equals(key)) {
+                    return null;
+                }
+            }
+        }
+        return o;
+    }
    
 }

Modified: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java Wed Aug 27 12:15:32 2008
@@ -972,10 +972,6 @@
 
         invoker.invokeLogicalHandlers(requestorProperty, lmc);
 
-        assertNotNull(message.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY));
-        assertEquals(outboundProperty, message.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY));
-        // assertNotNull(message.get(ObjectMessageContext.REQUESTOR_ROLE_PROPERTY));
-        // assertEquals(requestorProperty, message.get(ObjectMessageContext.REQUESTOR_ROLE_PROPERTY));
         assertTrue("handler not invoked", logicalHandlers[0].isHandleMessageInvoked());
         assertTrue("handler not invoked", logicalHandlers[1].isHandleMessageInvoked());
         assertTrue(invoker.getInvokedHandlers().contains(logicalHandlers[0]));

Modified: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ContextPropertiesMappingTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ContextPropertiesMappingTest.java?rev=689572&r1=689571&r2=689572&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ContextPropertiesMappingTest.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/ContextPropertiesMappingTest.java Wed Aug 27 12:15:32 2008
@@ -18,11 +18,9 @@
  */
 package org.apache.cxf.jaxws.support;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Map;
 
 import javax.activation.DataHandler;
@@ -30,16 +28,16 @@
 import javax.mail.util.ByteArrayDataSource;
 import javax.xml.ws.BindingProvider;
 import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
 
 
 import org.apache.cxf.attachment.AttachmentImpl;
-import org.apache.cxf.headers.Header;
+import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.ExchangeImpl;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
-import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -48,7 +46,6 @@
     private static final String ADDRESS = "test address";
     private static final String REQUEST_METHOD = "GET";
     private static final String HEADER = "header";
-    private static final Integer RESPONSE_CODE = 401; 
     
     private Map<String, Object> message = new HashMap<String, Object>();
     private Map<String, Object> requestContext = new HashMap<String, Object>();
@@ -67,35 +64,6 @@
         responseContext.clear();
     }
     
-    @Test
-    public void testMapRequestfromJaxws2Cxf() {
-        Object address = requestContext.get(Message.ENDPOINT_ADDRESS);
-        assertNull("address should be null", address);
-        ContextPropertiesMapping.mapRequestfromJaxws2Cxf(requestContext);
-        address = requestContext.get(Message.ENDPOINT_ADDRESS);
-        assertNotNull("address should not be null", address);
-        assertEquals("address should get from requestContext", address, ADDRESS + "jaxws");
-        message.putAll(requestContext);
-        address = message.get(Message.ENDPOINT_ADDRESS);        
-        assertNotNull("address should not be null", address);
-        assertEquals("address should get from requestContext", address, ADDRESS + "jaxws");
-        Object header = message.get(Message.PROTOCOL_HEADERS);
-        assertEquals("the message PROTOCOL_HEADERS should be updated", header, HEADER + "jaxws");
-    }
-    
-    @Test
-    public void testMapResponseCxf2Jaxws() {        
-        responseContext.putAll(message);
-        Object requestMethod = responseContext.get(MessageContext.HTTP_REQUEST_METHOD);
-        assertNull("requestMethod should be null", requestMethod);
-        ContextPropertiesMapping.mapResponsefromCxf2Jaxws(responseContext);
-        requestMethod = responseContext.get(MessageContext.HTTP_REQUEST_METHOD);
-        assertNotNull("requestMethod should not be null", requestMethod);
-        assertEquals(requestMethod, REQUEST_METHOD);
-        Object header = responseContext.get(MessageContext.HTTP_RESPONSE_HEADERS);
-        assertNotNull("the HTTP_RESPONSE_HEADERS should not be null ", header);
-        assertEquals("the HTTP_RESPONSE_HEADERS should be updated", header, HEADER);
-    }
     
     @Test
     public void testCreateWebServiceContext() {
@@ -108,7 +76,7 @@
         exchange.setInMessage(inMessage);
         exchange.setOutMessage(outMessage);
         
-        MessageContext ctx = ContextPropertiesMapping.createWebServiceContext(exchange);
+        MessageContext ctx = new WrappedMessageContext(exchange.getInMessage(), Scope.APPLICATION);
         
         Object requestHeader = ctx.get(MessageContext.HTTP_REQUEST_HEADERS);
         assertNotNull("the request header should not be null", requestHeader);
@@ -125,42 +93,6 @@
     }
     
     @Test
-    public void testUpdateWebServiceContext() {
-        Exchange xchng = new ExchangeImpl();
-        Message outMsg = new MessageImpl();
-        List<Header> hdrList = new ArrayList<Header>();
-        xchng.setOutMessage(outMsg);
-        
-        responseContext.put(MessageContext.HTTP_RESPONSE_CODE, RESPONSE_CODE);
-        
-        MessageContext ctx = EasyMock.createMock(MessageContext.class);
-        ctx.containsKey(MessageContext.HTTP_RESPONSE_CODE);
-        EasyMock.expectLastCall().andReturn(true);
-        ctx.get(MessageContext.HTTP_RESPONSE_CODE);
-        EasyMock.expectLastCall().andReturn(RESPONSE_CODE);
-        
-        ctx.containsKey(Header.HEADER_LIST);
-        EasyMock.expectLastCall().andReturn(true);
-        ctx.get(Header.HEADER_LIST);
-        EasyMock.expectLastCall().andReturn(hdrList);
-        ctx.get(Header.HEADER_LIST);
-        EasyMock.expectLastCall().andReturn(hdrList);
-
-        ctx.containsKey(MessageContext.HTTP_RESPONSE_HEADERS);
-        EasyMock.expectLastCall().andReturn(false);
-        
-        ctx.get(MessageContext.OUTBOUND_MESSAGE_ATTACHMENTS);
-        EasyMock.expectLastCall().andReturn(null);
-
-        EasyMock.replay(ctx);
-        
-        ContextPropertiesMapping.updateWebServiceContext(xchng, ctx);
-        Integer respCode = (Integer)outMsg.get(Message.RESPONSE_CODE);
-        assertNotNull("no response code set on out message", respCode);
-        assertEquals("incorrect response code returned", RESPONSE_CODE, respCode);
-    }
-
-    @Test
     @SuppressWarnings("unchecked")
     public void testCreateWebServiceContextWithInAttachments() {
         Exchange exchange = new ExchangeImpl();
@@ -180,7 +112,7 @@
         exchange.setInMessage(inMessage);
         exchange.setOutMessage(new MessageImpl());
         
-        MessageContext ctx = ContextPropertiesMapping.createWebServiceContext(exchange);
+        MessageContext ctx = new WrappedMessageContext(exchange.getInMessage(), Scope.APPLICATION);
         
         Object inAttachments = ctx.get(MessageContext.INBOUND_MESSAGE_ATTACHMENTS);
         assertNotNull("inbound attachments object must be initialized", inAttachments);