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 2007/05/16 22:13:26 UTC

svn commit: r538706 - in /incubator/cxf/trunk: common/common/src/main/java/org/apache/cxf/staxutils/ 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...

Author: dkulp
Date: Wed May 16 13:13:21 2007
New Revision: 538706

URL: http://svn.apache.org/viewvc?view=rev&rev=538706
Log:
Bunch of jaxws updates
* Implement context property scoping
* Implement SOAP context header support
* Add HandlerChain thing to service as well as SEI's


Modified:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CNamespaceContext.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractProtocolHandlerInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ContextPropertiesMapping.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java
    incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java
    incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java
    incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
    incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CNamespaceContext.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CNamespaceContext.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CNamespaceContext.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CNamespaceContext.java Wed May 16 13:13:21 2007
@@ -63,6 +63,9 @@
     }
 
     private String getPrefix(Element e, String uri) {
+        if (e == null) {
+            return null;
+        }
         NamedNodeMap attributes = e.getAttributes();
         if (attributes != null) {
             for (int i = 0; i < attributes.getLength(); i++) {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java Wed May 16 13:13:21 2007
@@ -20,13 +20,17 @@
 package org.apache.cxf.jaxws;
 
 import java.lang.reflect.Method;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
 
 import org.apache.cxf.common.util.factory.Factory;
 import org.apache.cxf.helpers.CastUtils;
 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.Exchange;
 import org.apache.cxf.service.invoker.ApplicationScopePolicy;
@@ -58,9 +62,29 @@
         // set up the webservice request context 
         MessageContext ctx = 
             ContextPropertiesMapping.createWebServiceContext(exchange);
+        
+        Map<String, Scope> scopes = CastUtils.cast((Map<?, ?>)ctx.get(WrappedMessageContext.SCOPES));
+        Map<String, Object> handlerScopedStuff = new HashMap<String, Object>();
+        if (scopes != null) {
+            for (Map.Entry<String, Scope> scope : scopes.entrySet()) {
+                if (scope.getValue() == Scope.HANDLER) {
+                    handlerScopedStuff.put(scope.getKey(), ctx.get(scope.getKey()));
+                }
+            }
+            for (String key : handlerScopedStuff.keySet()) {
+                ctx.remove(key);
+            }
+        }
+
+        
         WebServiceContextImpl.setMessageContext(ctx);
         
         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);
+        }
         
         //update the webservice response context
         ContextPropertiesMapping.updateWebServiceContext(exchange, ctx);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java Wed May 16 13:13:21 2007
@@ -22,10 +22,9 @@
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.net.HttpURLConnection;
-import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.FutureTask;
 import java.util.logging.Logger;
 
@@ -38,7 +37,7 @@
 //import javax.xml.ws.EndpointReference;
 import javax.xml.ws.Response;
 import javax.xml.ws.WebServiceException;
-import javax.xml.ws.handler.MessageContext;
+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;
@@ -52,6 +51,8 @@
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.Endpoint;
 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.service.model.BindingOperationInfo;
 
@@ -60,8 +61,7 @@
 
     private static final Logger LOG = LogUtils.getL7dLogger(JaxWsClientProxy.class);
 
-    protected Map<String, Object> requestContext =
-            Collections.synchronizedMap(new HashMap<String, Object>());
+    protected Map<String, Object> requestContext = new ConcurrentHashMap<String, Object>();
 
     protected ThreadLocal <Map<String, Object>> responseContext =
             new ThreadLocal<Map<String, Object>>();
@@ -176,6 +176,14 @@
         
         // 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()) {
+                if (scope.getValue() == Scope.HANDLER) {
+                    respContext.remove(scope.getKey());
+                }
+            }
+        }
         return result;
 
     }
@@ -202,9 +210,13 @@
 
 
     private Map<String, Object> getRequestContextCopy() {
-        synchronized (this.requestContext) {
-            return new HashMap<String, Object>(this.requestContext);
+        Map<String, Object> realMap = new HashMap<String, Object>();
+        WrappedMessageContext ctx = new WrappedMessageContext(realMap,
+                                                              Scope.APPLICATION);
+        for (Map.Entry<String, Object> ent : requestContext.entrySet()) {
+            ctx.put(ent.getKey(), ent.getValue());
         }
+        return realMap;
     }
     
     public Map<String, Object> getRequestContext() {
@@ -222,18 +234,6 @@
         return binding;
     }
 
-    protected void populateResponseContext(MessageContext ctx) {
-        Iterator<String> iter = ctx.keySet().iterator();
-        Map<String, Object> respCtx = getResponseContext();
-        while (iter.hasNext()) {
-            String obj = iter.next();
-            if (MessageContext.Scope.APPLICATION.compareTo(ctx.getScope(obj)) == 0) {
-                respCtx.put(obj, ctx.get(obj));
-            }
-        }
-    }
-
-    
     /*
     //  TODO JAX-WS 2.1
     public EndpointReference getEndpointReference() {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/context/WrappedMessageContext.java Wed May 16 13:13:21 2007
@@ -26,15 +26,65 @@
 
 import javax.xml.ws.handler.MessageContext;
 
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.message.Message;
 
 public class WrappedMessageContext implements MessageContext {
-
+    public static final String SCOPES = WrappedMessageContext.class.getName() + ".SCOPES";
+    
+    private Map<String, Object> contextMap;
     private Message message;
-    private Map<String, Scope> scopes = new HashMap<String, Scope>();
+    private Map<String, Scope> scopes;
+    private Scope defaultScope;
 
     public WrappedMessageContext(Message m) {
+        this(m, 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) {
         message = m;
+        contextMap = map;
+        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);
+            }
+        }
+        if (scopes == null) {
+            scopes = new HashMap<String, Scope>();
+            contextMap.put(SCOPES, scopes);
+        }
+    }
+    
+    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));
+            }
+        }
+    }
+    protected final boolean isRequestor() {
+        return Boolean.TRUE.equals(contextMap.containsKey(Message.REQUESTOR_ROLE));
+    }
+    protected final boolean isOutbound() {
+        return message != null 
+            && (message == message.getExchange().getOutMessage()
+                || message == message.getExchange().getOutFaultMessage());
     }
     
     public Message getWrappedMessage() {
@@ -42,71 +92,79 @@
     }
     
     public void clear() {
-        message.clear();      
+        contextMap.clear();      
     }
 
     public boolean containsKey(Object key) {
-        return message.containsKey(key);
+        return contextMap.containsKey(key);
     }
 
     public boolean containsValue(Object value) {
-        return message.containsValue(value);
+        return contextMap.containsValue(value);
     }
 
     public Set<Entry<String, Object>> entrySet() {
-        return message.entrySet();
+        return contextMap.entrySet();
     }
 
     public Object get(Object key) {
-        return message.get(key);
+        return contextMap.get(key);
     }
 
     public boolean isEmpty() {
-        return message.isEmpty();
+        return contextMap.isEmpty();
     }
 
     public Set<String> keySet() {
-        return message.keySet();
+        return contextMap.keySet();
     }
 
     public Object put(String key, Object value) {
-        return message.put(key, value);
+        if (!MessageContext.MESSAGE_OUTBOUND_PROPERTY.equals(key)) {
+            scopes.put(key, defaultScope);
+        }
+        return contextMap.put(key, value);
     }
 
     public void putAll(Map<? extends String, ? extends Object> t) {
-        message.putAll(t);
+        for (Map.Entry<? extends String, ? extends Object> s : t.entrySet()) {
+            put(s.getKey(), s.getValue());
+        }
     }
 
     public Object remove(Object key) {
-        return message.remove(key);
+        scopes.remove(key);
+        return contextMap.remove(key);
     }
 
     public int size() {
-        return message.size();
+        return contextMap.size();
     }
 
     public Collection<Object> values() {
-        return message.values();
+        return contextMap.values();
     }
 
-    public void setScope(String arg0, Scope arg1) {
-        if (!this.containsKey(arg0)) {
-            throw new IllegalArgumentException("non-existant property-" + arg0 + "is specified");    
+    public void setScope(String key, Scope arg1) {
+        if (!this.containsKey(key)) {
+            throw new IllegalArgumentException("non-existant property-" + key + "is specified");    
         }
-        scopes.put(arg0, arg1);        
+        scopes.put(key, arg1);        
     }
 
-    public Scope getScope(String arg0) {
-        
-        if (containsKey(arg0)) {
-            if (scopes.containsKey(arg0)) {
-                return scopes.get(arg0);
+    public Scope getScope(String key) {
+        if (containsKey(key)) {
+            if (scopes.containsKey(key)) {
+                return scopes.get(key);
             } else {
-                return Scope.HANDLER;
+                return defaultScope;
             }
         }
-        throw new IllegalArgumentException("non-existant property-" + arg0 + "is specified");
+        throw new IllegalArgumentException("non-existant property-" + key + "is specified");
     }
     
+    public Map<String, Scope> getScopes() {
+        return scopes;
+    }
     
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractProtocolHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractProtocolHandlerInterceptor.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractProtocolHandlerInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractProtocolHandlerInterceptor.java Wed May 16 13:13:21 2007
@@ -21,6 +21,7 @@
 
 import javax.xml.ws.Binding;
 import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
 
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.message.Message;
@@ -45,7 +46,7 @@
     }
     
     protected MessageContext createProtocolMessageContext(Message message) {
-        return new WrappedMessageContext(message);
+        return new WrappedMessageContext(message, Scope.HANDLER);
     }
 
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageContextImpl.java Wed May 16 13:13:21 2007
@@ -29,7 +29,7 @@
 public class LogicalMessageContextImpl extends WrappedMessageContext implements LogicalMessageContext {
 
     public LogicalMessageContextImpl(Message wrapped) {
-        super(wrapped);
+        super(wrapped, Scope.HANDLER);
     }
       
     public LogicalMessage getMessage() {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java Wed May 16 13:13:21 2007
@@ -20,19 +20,27 @@
 package org.apache.cxf.jaxws.handler.soap;
 
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
 import javax.xml.namespace.QName;
 import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPHeaderElement;
 import javax.xml.soap.SOAPMessage;
+import javax.xml.ws.WebServiceException;
 import javax.xml.ws.handler.MessageContext;
 import javax.xml.ws.handler.soap.SOAPMessageContext;
 
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
-import org.apache.cxf.headers.Header;
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.XMLMessage;
@@ -40,8 +48,11 @@
 public class SOAPMessageContextImpl extends WrappedMessageContext implements SOAPMessageContext {
     private static final SAAJInInterceptor SAAJ_IN = new SAAJInInterceptor();
     
+    private Set<String> roles = new HashSet<String>();
+    
     public SOAPMessageContextImpl(Message m) {
-        super(m);
+        super(m, Scope.HANDLER);
+        roles.add(getWrappedSoapMessage().getVersion().getNextRole());
     }
 
     public void setMessage(SOAPMessage message) {
@@ -78,33 +89,35 @@
 
     // TODO: handle the boolean parameter
     public Object[] getHeaders(QName name, JAXBContext context, boolean allRoles) {
-//        Element headerElements = getWrappedSoapMessage().getHeaders(Element.class);
-        List<Header> headerElements = getWrappedSoapMessage().getHeaders();
-        if (headerElements == null) {
-            return null;
-        }
-        
-        
-//        Collection<Object> objects = new ArrayList<Object>();
-//        for (int i = 0; i < headerElements.getChildNodes().getLength(); i++) {
-//            if (headerElements.getChildNodes().item(i) instanceof Element) {
-//                Element e = (Element)headerElements.getChildNodes().item(i);
-//                if (name.equals(e.getNamespaceURI())) {
-//                    try {
-//                        objects.add(context.createUnmarshaller().unmarshal(e));
-//                    } catch (JAXBException ex) {
-//                        // do something
-//                    }
-//                }
-//            }
-//        }
-//        Object[] headerObjects = new Object[objects.size()];
-//        return objects.toArray(headerObjects);
-        return headerElements.toArray();
+        SOAPMessage msg = getMessage();
+        SOAPHeader header;
+        try {
+            header = msg.getSOAPPart().getEnvelope().getHeader();
+            if (header == null || !header.hasChildNodes()) {
+                return new Object[0];
+            }
+            List<Object> ret = new ArrayList<Object>();
+            Iterator<SOAPHeaderElement> it = CastUtils.cast(header.examineAllHeaderElements());
+            while (it.hasNext()) {
+                SOAPHeaderElement she = it.next();
+                if ((allRoles
+                    || roles.contains(she.getActor())) 
+                    && name.equals(she.getElementQName())) {
+                    
+                    ret.add(context.createUnmarshaller().unmarshal(she));
+                    
+                }
+            }
+            return ret.toArray(new SOAPHeaderElement[ret.size()]);
+        } catch (SOAPException e) {
+            throw new WebServiceException(e);
+        } catch (JAXBException e) {
+            throw new WebServiceException(e);
+        } 
     }
 
     public Set<String> getRoles() {
-        return null;
+        return roles;
     }
 
     private SoapMessage getWrappedSoapMessage() {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ContextPropertiesMapping.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ContextPropertiesMapping.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ContextPropertiesMapping.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ContextPropertiesMapping.java Wed May 16 13:13:21 2007
@@ -30,6 +30,7 @@
 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.binding.soap.SoapMessage;
 import org.apache.cxf.configuration.security.AuthorizationPolicy;
@@ -153,7 +154,7 @@
     
     
     public static MessageContext createWebServiceContext(Exchange exchange) {
-        MessageContext ctx = new WrappedMessageContext(exchange.getInMessage());
+        MessageContext ctx = new WrappedMessageContext(exchange.getInMessage(), Scope.APPLICATION);
         mapCxf2Jaxws(ctx);        
         addMessageAttachments(ctx, 
                               exchange.getInMessage(), 

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainInvokerTest.java Wed May 16 13:13:21 2007
@@ -43,6 +43,7 @@
 import javax.xml.ws.handler.soap.SOAPMessageContext;
 
 import junit.framework.TestCase;
+import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.jaxws.handler.logical.LogicalMessageContextImpl;
 import org.apache.cxf.jaxws.handler.soap.SOAPMessageContextImpl;
@@ -250,7 +251,7 @@
         
         //create an empty SOAP body for testing
         try {
-            pmc = new SOAPMessageContextImpl(message);
+            pmc = new SOAPMessageContextImpl(new SoapMessage(message));
             MessageFactory factory = MessageFactory.newInstance();
             SOAPMessage soapMessage = factory.createMessage();      
             ((SOAPMessageContext)pmc).setMessage(soapMessage);            

Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java (original)
+++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/generators/ServiceGenerator.java Wed May 16 13:13:21 2007
@@ -74,6 +74,20 @@
         }
         
         for (JavaServiceClass js : serviceClasses.values()) {
+            if (js.getHandlerChains() != null) {
+                HandlerConfigGenerator handlerGen = new HandlerConfigGenerator();
+                handlerGen.setJavaInterface(js);
+                handlerGen.generate(getEnvironment());
+
+                String annot = handlerGen.getHandlerAnnotation().toString();
+                if (handlerGen.getHandlerAnnotation() != null
+                    && !js.getAnnotations().contains(annot)) {
+                    js.addAnnotation(annot);
+                    js.addImport("javax.jws.HandlerChain");
+                }
+            }
+
+            
             String url = (String)env.get(ToolConstants.CFG_WSDLURL);
             String location = (String)env.get(ToolConstants.CFG_WSDLLOCATION);
             if (location == null 

Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java (original)
+++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/processor/internal/ServiceProcessor.java Wed May 16 13:13:21 2007
@@ -30,6 +30,8 @@
 import javax.wsdl.extensions.mime.MIMEMultipartRelated;
 import javax.xml.namespace.QName;
 
+import org.w3c.dom.Element;
+
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.BindingMessageInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
@@ -176,6 +178,9 @@
         if (model.getServiceClasses().containsKey(name)) {
             sclz = model.getServiceClasses().get(name);
         }
+        
+        Element handler = (Element)context.get(ToolConstants.HANDLER_CHAIN);
+        sclz.setHandlerChains(handler);
         
         
         Collection<EndpointInfo> ports = service.getEndpoints();

Modified: incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm (original)
+++ incubator/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm Wed May 16 13:13:21 2007
@@ -26,6 +26,10 @@
 #foreach ($port in ${service.Ports})    
 import ${port.PackageName}.${port.InterfaceClass};
 #end
+#foreach ($import in ${service.Imports}) 
+import ${import};
+#end
+
 /**
  * This class was generated by the CXF $version
  * $currentdate
@@ -34,6 +38,9 @@
  */
 
 @WebServiceClient(name = "${service.ServiceName}", targetNamespace = "$service.Namespace", wsdlLocation = "$wsdlLocation")
+#foreach ($annotation in $service.Annotations)
+$annotation
+#end
 public class ${service.Name} extends Service {
 
     private final static URL WSDL_LOCATION;

Modified: incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java?view=diff&rev=538706&r1=538705&r2=538706
==============================================================================
--- incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java (original)
+++ incubator/cxf/trunk/tools/wsdlto/test/src/test/java/org/apache/cxf/tools/wsdlto/jaxws/CodeGenTest.java Wed May 16 13:13:21 2007
@@ -24,6 +24,7 @@
 import java.lang.reflect.Modifier;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.util.Arrays;
 
 import javax.jws.HandlerChain;
 import javax.jws.Oneway;
@@ -539,7 +540,7 @@
         assertTrue(address.exists());
 
         File[] files = address.listFiles();
-        assertEquals(5, files.length);
+        assertEquals(Arrays.asList(address.listFiles()).toString(), 6, files.length);
         File handlerConfig = new File(address, "Greeter_handler.xml");
         assertTrue(handlerConfig.exists());