axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From prad...@apache.org
Subject svn commit: r553341 - in /webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws: ./ binding/ client/dispatch/ client/proxy/ core/controller/ feature/ feature/config/ feature/util/ spi/
Date Wed, 04 Jul 2007 22:02:45 GMT
Author: pradine
Date: Wed Jul  4 15:02:44 2007
New Revision: 553341

URL: http://svn.apache.org/viewvc?view=rev&rev=553341
Log:
Create a framework to support WebServiceFeatures. Add most of the support for AddressingFeature and MTOMFeature, on the client-side.

Added:
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureConfigurator.java
      - copied, changed from r551872, webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/util/WebServiceFeatureConfigurator.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/AddressingConfigurator.java
      - copied, changed from r551872, webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/W3CAndSubmissionAddressingConfigurator.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/Binding.java
Removed:
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/W3CAndSubmissionAddressingConfigurator.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/util/
Modified:
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingUtils.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureValidator.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/MTOMConfigurator.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/RespectBindingConfigurator.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/BindingProvider.java
    webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java Wed Jul  4 15:02:44 2007
@@ -18,6 +18,7 @@
  */
 package org.apache.axis2.jaxws;
 
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReferenceHelper;
 import org.apache.axis2.addressing.metadata.ServiceName;
 import org.apache.axis2.addressing.metadata.WSDLLocation;
@@ -29,7 +30,6 @@
 import org.apache.axis2.jaxws.core.MessageContext;
 import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.ServiceDescriptionWSDL;
-import org.apache.axis2.jaxws.feature.WebServiceFeatureValidator;
 import org.apache.axis2.jaxws.handler.HandlerResolverImpl;
 import org.apache.axis2.jaxws.i18n.Messages;
 import org.apache.axis2.jaxws.registry.FactoryRegistry;
@@ -56,18 +56,11 @@
 
     protected ServiceDelegate serviceDelegate;
     
-    protected WebServiceFeatureValidator validator;
-    
-    //TODO: Is this the best place for this code?
     protected org.apache.axis2.addressing.EndpointReference epr;
     
-    //TODO: Is this the best place for this code?
     protected String addressingNamespace;
 
-    private Binding binding = null;
-    
-    private EndpointReferenceFactory eprFactory =
-        (EndpointReferenceFactory) FactoryRegistry.getFactory(EndpointReferenceFactory.class);
+    private org.apache.axis2.jaxws.spi.Binding binding = null;
 
     public BindingProvider(ServiceDelegate svcDelegate,
                            EndpointDescription epDesc,
@@ -78,15 +71,14 @@
         this.serviceDelegate = svcDelegate;
         this.epr = epr;
         this.addressingNamespace = addressingNamespace;
-        this.validator = new WebServiceFeatureValidator(false, features);
         
-        initialize();
+        initialize(features);
     }
 
     /*
      * Initialize any objects needed by the BindingProvider
      */
-    private void initialize() {
+    private void initialize(WebServiceFeature... features) {
         requestContext = new ValidatingClientContext();
         responseContext = new ValidatingClientContext();
         
@@ -102,16 +94,15 @@
         
         // JAXWS 9.2.1.1 requires that we go ahead and create the binding object
         // so we can also set the handlerchain
-        if (binding == null) {
-            binding = BindingUtils.createBinding(endpointDesc);
-            
-            // TODO should we allow the ServiceDelegate to figure out the default handlerresolver?  Probably yes, since a client app may look for one there.
-            HandlerResolver handlerResolver =
-                    serviceDelegate.getHandlerResolver() != null ? serviceDelegate.getHandlerResolver()
-                            : new HandlerResolverImpl(endpointDesc);
-            binding.setHandlerChain(handlerResolver.getHandlerChain(endpointDesc.getPortInfo()));
-        }
-
+        binding = (org.apache.axis2.jaxws.spi.Binding) BindingUtils.createBinding(endpointDesc);
+        
+        // TODO should we allow the ServiceDelegate to figure out the default handlerresolver?  Probably yes, since a client app may look for one there.
+        HandlerResolver handlerResolver =
+            serviceDelegate.getHandlerResolver() != null ? serviceDelegate.getHandlerResolver()
+                    : new HandlerResolverImpl(endpointDesc);
+        binding.setHandlerChain(handlerResolver.getHandlerChain(endpointDesc.getPortInfo()));
+        
+        binding.setWebServiceFeatures(features);
     }
 
     public ServiceDelegate getServiceDelegate() {
@@ -125,10 +116,6 @@
     public Binding getBinding() {
         return binding;
     }
-    
-    public void setBinding(Binding binding) {
-        this.binding = binding;
-    }
 
     public Map<String, Object> getRequestContext() {
         return requestContext;
@@ -226,68 +213,52 @@
     }
 
     public <T extends EndpointReference> T getEndpointReference(Class<T> clazz) {
-        T jaxwsEPR = null;
-        String bindingID = endpointDesc.getClientBindingID();
-        String addressingNamespace = eprFactory.getAddressingNamespace(clazz);
-        
-        if (BindingUtils.isSOAPBinding(bindingID)) {
-            try {
-                if (epr == null) {
-                    String address = endpointDesc.getEndpointAddress();
-                    org.apache.axis2.addressing.EndpointReference epr =
-                        new org.apache.axis2.addressing.EndpointReference(address);
-                    QName service = endpointDesc.getServiceQName();
-                    QName port = endpointDesc.getPortQName();
-                    URL wsdlURL = ((ServiceDescriptionWSDL) endpointDesc.getServiceDescription()).getWSDLLocation();
-                    ServiceName serviceName = new ServiceName(service, port.getLocalPart());
-                    WSDLLocation wsdlLocation = new WSDLLocation(port.getNamespaceURI(), wsdlURL.toString());
-                    EndpointReferenceHelper.setServiceNameMetadata(epr, addressingNamespace, serviceName);
-                    EndpointReferenceHelper.setWSDLLocationMetadata(epr, addressingNamespace, wsdlLocation);
-                    this.epr = epr;
-                    this.addressingNamespace = addressingNamespace;
-                }
-                else if (!addressingNamespace.equals(this.addressingNamespace)) {
-                    String address = this.epr.getAddress();
-                    org.apache.axis2.addressing.EndpointReference epr =
-                        new org.apache.axis2.addressing.EndpointReference(address);
-                    QName service = endpointDesc.getServiceQName();
-                    QName port = endpointDesc.getPortQName();
-                    URL wsdlURL = ((ServiceDescriptionWSDL) endpointDesc.getServiceDescription()).getWSDLLocation();
-                    ServiceName serviceName = new ServiceName(service, port.getLocalPart());
-                    WSDLLocation wsdlLocation = new WSDLLocation(port.getNamespaceURI(), wsdlURL.toString());
-                    EndpointReferenceHelper.setServiceNameMetadata(epr, addressingNamespace, serviceName);
-                    EndpointReferenceHelper.setWSDLLocationMetadata(epr, addressingNamespace, wsdlLocation);
-                    EndpointReferenceHelper.transferReferenceParameters(this.epr, epr);
-                    this.epr = epr;
-                    this.addressingNamespace = addressingNamespace;                    
-                }
-            
-                jaxwsEPR = clazz.cast(EndpointReferenceConverter.convertFromAxis2(epr, addressingNamespace));
-            }
-            catch (Exception e) {
-                //TODO NLS enable.
-                throw ExceptionFactory.makeWebServiceException("Error creating endpoint reference", e);
-            }
+        EndpointReference jaxwsEPR = null;
+        String addressingNamespace = getAddressingNamespace(clazz);
+        
+        if (!BindingUtils.isSOAPBinding(binding.getBindingID()))
+            throw new UnsupportedOperationException("This method is unsupported for the binding: " + binding.getBindingID());
+        
+        try {
+            org.apache.axis2.addressing.EndpointReference epr =
+                getAxis2EndpointReference(addressingNamespace);
+            jaxwsEPR = EndpointReferenceConverter.convertFromAxis2(epr, addressingNamespace);
         }
-        else {
+        catch (Exception e) {
             //TODO NLS enable.
-            throw new UnsupportedOperationException("This method is not supported with a binding of " + bindingID);
+            throw ExceptionFactory.makeWebServiceException("Error creating endpoint reference", e);
+        }
+        
+        return clazz.cast(jaxwsEPR);
+    }
+
+    public org.apache.axis2.addressing.EndpointReference getAxis2EndpointReference(String addressingNamespace) throws AxisFault {
+        org.apache.axis2.addressing.EndpointReference epr = this.epr;
+        
+        if (epr == null || !addressingNamespace.equals(this.addressingNamespace)) {
+            String address = endpointDesc.getEndpointAddress();
+            epr = new org.apache.axis2.addressing.EndpointReference(address);
+            QName service = endpointDesc.getServiceQName();
+            QName port = endpointDesc.getPortQName();
+            URL wsdlURL = ((ServiceDescriptionWSDL) endpointDesc.getServiceDescription()).getWSDLLocation();
+            ServiceName serviceName = new ServiceName(service, port.getLocalPart());
+            WSDLLocation wsdlLocation = new WSDLLocation(port.getNamespaceURI(), wsdlURL.toString());
+            EndpointReferenceHelper.setServiceNameMetadata(epr, addressingNamespace, serviceName);
+            EndpointReferenceHelper.setWSDLLocationMetadata(epr, addressingNamespace, wsdlLocation);
         }
         
-        return jaxwsEPR;
+        return epr;
     }
     
     public String getAddressingNamespace() {
         return addressingNamespace;
     }
 
-    public org.apache.axis2.addressing.EndpointReference getAxis2EndpointReference() {
-        return epr;
-    }    
-
-    public WebServiceFeatureValidator getWebServiceFeatureValidator() {
-        return validator;
-    }    
+    private String getAddressingNamespace(Class clazz) {
+        EndpointReferenceFactory eprFactory =
+            (EndpointReferenceFactory) FactoryRegistry.getFactory(EndpointReferenceFactory.class);
+        return eprFactory.getAddressingNamespace(clazz);
+    }
     
     /*
     * An inner class used to validate properties as they are set by the client.

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingImpl.java Wed Jul  4 15:02:44 2007
@@ -18,10 +18,17 @@
  */
 package org.apache.axis2.jaxws.binding;
 
+import org.apache.axis2.jaxws.core.MessageContext;
 import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator;
+import org.apache.axis2.jaxws.feature.WebServiceFeatureValidator;
+import org.apache.axis2.jaxws.feature.config.RespectBindingConfigurator;
 import org.apache.axis2.jaxws.handler.HandlerResolverImpl;
+import org.apache.axis2.jaxws.spi.Binding;
+import org.apache.axis2.jaxws.spi.BindingProvider;
 
-import javax.xml.ws.Binding;
+import javax.xml.ws.RespectBindingFeature;
+import javax.xml.ws.WebServiceFeature;
 import javax.xml.ws.handler.Handler;
 
 import java.util.ArrayList;
@@ -32,7 +39,9 @@
  * @author rott classes that would normally "implement javax.xml.ws.Binding"
  *         should extend this class instead.
  */
-public class BindingImpl implements Binding {
+public abstract class BindingImpl implements Binding {
+    private static final WebServiceFeatureConfigurator RESPECT_BINDING_CONFIGURATOR =
+        new RespectBindingConfigurator();
 
     // an unsorted list of handlers
     private List<Handler> handlers = null;
@@ -42,15 +51,13 @@
     private EndpointDescription endpointDesc;
 
     protected Set<String> roles = null;
+    
+    protected WebServiceFeatureValidator validator = null;
 
     protected static final String SOAP11_ENV_NS = "http://schemas.xmlsoap.org/soap/envelope/";
 
     protected static final String SOAP12_ENV_NS = "http://www.w3.org/2003/05/soap-envelope";
 
-    public BindingImpl(String bindingId) {
-        this.bindingId = bindingId;
-    }
-
     public BindingImpl(EndpointDescription endpointDesc) {
         this.endpointDesc = endpointDesc;
         // client
@@ -58,6 +65,9 @@
         if (this.bindingId == null)
             // server
             this.bindingId = endpointDesc.getBindingType();
+        
+        validator = new WebServiceFeatureValidator();
+        validator.addConfigurator(RespectBindingFeature.ID, RESPECT_BINDING_CONFIGURATOR);
     }
 
     public List<Handler> getHandlerChain() {
@@ -86,5 +96,21 @@
      */
     public String getBindingID() {
         return this.bindingId;
+    }
+
+    public void configure(MessageContext messageContext, BindingProvider provider) {
+        validator.configure(messageContext, provider);
+    }
+
+    public WebServiceFeature getWebServiceFeature(String id) {
+        return validator.getFeature(id);
+    }
+
+    public void setWebServiceFeatures(WebServiceFeature... features) {
+        if (features != null) {
+            for (WebServiceFeature feature : features) {
+                validator.addFeature(feature);
+            }
+        }
     }
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingUtils.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingUtils.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/BindingUtils.java Wed Jul  4 15:02:44 2007
@@ -34,7 +34,10 @@
             // Do we default to the SOAPBinding?            
         }
         
-        String bindingType = ed.getBindingType();
+        String bindingType = ed.getClientBindingID();
+        if (bindingType == null)
+            bindingType = ed.getBindingType();
+        
         if (BindingUtils.isSOAPBinding(bindingType)) {
             return new SOAPBinding(ed);
         }

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java Wed Jul  4 15:02:44 2007
@@ -19,8 +19,11 @@
 package org.apache.axis2.jaxws.binding;
 
 import org.apache.axis2.jaxws.ExceptionFactory;
+import org.apache.axis2.jaxws.addressing.SubmissionAddressingFeature;
 import org.apache.axis2.jaxws.description.EndpointDescription;
-import org.apache.axis2.jaxws.i18n.Messages;
+import org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator;
+import org.apache.axis2.jaxws.feature.config.MTOMConfigurator;
+import org.apache.axis2.jaxws.feature.config.AddressingConfigurator;
 import org.apache.axis2.jaxws.utility.SAAJFactory;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -30,8 +33,9 @@
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPFactory;
 import javax.xml.ws.WebServiceException;
+import javax.xml.ws.soap.AddressingFeature;
+import javax.xml.ws.soap.MTOMFeature;
 
-import java.util.AbstractSet;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -42,6 +46,10 @@
  * explicitly specificied.
  */
 public class SOAPBinding extends BindingImpl implements javax.xml.ws.soap.SOAPBinding {
+    private static final WebServiceFeatureConfigurator ADDRESSING_CONFIGURATOR =
+        new AddressingConfigurator();
+    private static final WebServiceFeatureConfigurator MTOM_CONFIGURATOR =
+        new MTOMConfigurator();
 
     private boolean mtomEnabled = false;
 
@@ -49,6 +57,15 @@
 
     public SOAPBinding(EndpointDescription endpointDesc) {
         super(endpointDesc);
+        
+        validator.addConfigurator(AddressingFeature.ID, ADDRESSING_CONFIGURATOR);
+        validator.addConfigurator(SubmissionAddressingFeature.ID, ADDRESSING_CONFIGURATOR);
+        validator.addConfigurator(MTOMFeature.ID, MTOM_CONFIGURATOR);
+        
+        if (SOAPBinding.SOAP11HTTP_MTOM_BINDING.equalsIgnoreCase(bindingId) ||
+                SOAPBinding.SOAP12HTTP_MTOM_BINDING.equalsIgnoreCase(bindingId)) {
+            setMTOMEnabled(true);
+        }
     }
 
     /*

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/dispatch/BaseDispatch.java Wed Jul  4 15:02:44 2007
@@ -47,10 +47,10 @@
 import org.apache.axis2.jaxws.core.controller.AxisInvocationController;
 import org.apache.axis2.jaxws.core.controller.InvocationController;
 import org.apache.axis2.jaxws.description.EndpointDescription;
-import org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigUtil;
 import org.apache.axis2.jaxws.i18n.Messages;
 import org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils;
 import org.apache.axis2.jaxws.message.Message;
+import org.apache.axis2.jaxws.spi.Binding;
 import org.apache.axis2.jaxws.spi.Constants;
 import org.apache.axis2.jaxws.spi.ServiceDelegate;
 import org.apache.axis2.jaxws.spi.migrator.ApplicationContextMigratorUtil;
@@ -133,7 +133,8 @@
              */
 
             // be sure to use whatever handlerresolver is registered on the Service
-            invocationContext.setHandlers(getBinding().getHandlerChain());
+            Binding binding = (Binding) getBinding();
+            invocationContext.setHandlers(binding.getHandlerChain());
 
             Message requestMsg = null;
             try {
@@ -146,6 +147,7 @@
                 throw getProtocolException(e);
             }
 
+            setupMessageProperties(requestMsg);
             requestMsgCtx.setMessage(requestMsg);
 
             // Migrate the properties from the client request context bag to
@@ -154,10 +156,8 @@
                     Constants.APPLICATION_CONTEXT_MIGRATOR_LIST_ID,
                     getRequestContext(), requestMsgCtx);
 
-            // Perform the client-side configuration, as specified during the invocation.
-            WebServiceFeatureConfigUtil.performConfiguration(
-                    Constants.WEB_SERVICE_FEATURE_CONFIGURATOR_LIST_ID,
-                    requestMsgCtx, this);
+            // Perform the WebServiceFeature configuration requested by the user.
+            binding.configure(requestMsgCtx, this);
 
             // Send the request using the InvocationController
             ic.invoke(invocationContext);
@@ -213,6 +213,21 @@
             MessageContext requestMsgCtx = new MessageContext();
             requestMsgCtx.setEndpointDescription(getEndpointDescription());
             invocationContext.setRequestMessageContext(requestMsgCtx);
+            
+            /*
+             * TODO: review: make sure the handlers are set on the InvocationContext
+             * This implementation of the JAXWS runtime does not use Endpoint, which
+             * would normally be the place to initialize and store the handler list.
+             * In lieu of that, we will have to intialize and store them on the 
+             * InvocationContext.  also see the InvocationContextFactory.  On the client
+             * side, the binding is not yet set when we call into that factory, so the
+             * handler list doesn't get set on the InvocationContext object there.  Thus
+             * we gotta do it here.
+             */
+
+            // be sure to use whatever handlerresolver is registered on the Service
+            Binding binding = (Binding) getBinding();
+            invocationContext.setHandlers(binding.getHandlerChain());
 
             Message requestMsg = null;
             try {
@@ -225,6 +240,7 @@
                 throw getProtocolException(e);
             }
 
+            setupMessageProperties(requestMsg);
             requestMsgCtx.setMessage(requestMsg);
 
             // Migrate the properties from the client request context bag to
@@ -233,10 +249,8 @@
                     Constants.APPLICATION_CONTEXT_MIGRATOR_LIST_ID,
                     getRequestContext(), requestMsgCtx);
 
-            // Perform the client-side configuration, as specified during the invocation.
-            WebServiceFeatureConfigUtil.performConfiguration(
-                    Constants.WEB_SERVICE_FEATURE_CONFIGURATOR_LIST_ID,
-                    requestMsgCtx, this);
+            // Perform the WebServiceFeature configuration requested by the user.
+            binding.configure(requestMsgCtx, this);
 
             // Send the request using the InvocationController
             ic.invokeOneWay(invocationContext);
@@ -275,6 +289,21 @@
             MessageContext requestMsgCtx = new MessageContext();
             requestMsgCtx.setEndpointDescription(getEndpointDescription());
             invocationContext.setRequestMessageContext(requestMsgCtx);
+            
+            /*
+             * TODO: review: make sure the handlers are set on the InvocationContext
+             * This implementation of the JAXWS runtime does not use Endpoint, which
+             * would normally be the place to initialize and store the handler list.
+             * In lieu of that, we will have to intialize and store them on the 
+             * InvocationContext.  also see the InvocationContextFactory.  On the client
+             * side, the binding is not yet set when we call into that factory, so the
+             * handler list doesn't get set on the InvocationContext object there.  Thus
+             * we gotta do it here.
+             */
+
+            // be sure to use whatever handlerresolver is registered on the Service
+            Binding binding = (Binding) getBinding();
+            invocationContext.setHandlers(binding.getHandlerChain());
 
             Message requestMsg = null;
             if (isValidInvocationParam(obj)) {
@@ -283,6 +312,7 @@
                 throw ExceptionFactory.makeWebServiceException(Messages.getMessage("dispatchInvalidParam"));
             }
 
+            setupMessageProperties(requestMsg);
             requestMsgCtx.setMessage(requestMsg);
 
             // Migrate the properties from the client request context bag to
@@ -291,10 +321,8 @@
                     Constants.APPLICATION_CONTEXT_MIGRATOR_LIST_ID,
                     getRequestContext(), requestMsgCtx);
 
-            // Perform the client-side configuration, as specified during the invocation.
-            WebServiceFeatureConfigUtil.performConfiguration(
-                    Constants.WEB_SERVICE_FEATURE_CONFIGURATOR_LIST_ID,
-                    requestMsgCtx, this);
+            // Perform the WebServiceFeature configuration requested by the user.
+            binding.configure(requestMsgCtx, this);
 
             // Setup the Executor that will be used to drive async responses back to 
             // the client.
@@ -344,6 +372,21 @@
             MessageContext requestMsgCtx = new MessageContext();
             requestMsgCtx.setEndpointDescription(getEndpointDescription());
             invocationContext.setRequestMessageContext(requestMsgCtx);
+            
+            /*
+             * TODO: review: make sure the handlers are set on the InvocationContext
+             * This implementation of the JAXWS runtime does not use Endpoint, which
+             * would normally be the place to initialize and store the handler list.
+             * In lieu of that, we will have to intialize and store them on the 
+             * InvocationContext.  also see the InvocationContextFactory.  On the client
+             * side, the binding is not yet set when we call into that factory, so the
+             * handler list doesn't get set on the InvocationContext object there.  Thus
+             * we gotta do it here.
+             */
+
+            // be sure to use whatever handlerresolver is registered on the Service
+            Binding binding = (Binding) getBinding();
+            invocationContext.setHandlers(binding.getHandlerChain());
 
             Message requestMsg = null;
             if (isValidInvocationParam(obj)) {
@@ -352,6 +395,7 @@
                 throw ExceptionFactory.makeWebServiceException(Messages.getMessage("dispatchInvalidParam"));
             }
 
+            setupMessageProperties(requestMsg);
             requestMsgCtx.setMessage(requestMsg);
 
             // Migrate the properties from the client request context bag to
@@ -360,10 +404,8 @@
                     Constants.APPLICATION_CONTEXT_MIGRATOR_LIST_ID,
                     getRequestContext(), requestMsgCtx);
 
-            // Perform the client-side configuration, as specified during the invocation.
-            WebServiceFeatureConfigUtil.performConfiguration(
-                    Constants.WEB_SERVICE_FEATURE_CONFIGURATOR_LIST_ID,
-                    requestMsgCtx, this);
+            // Perform the WebServiceFeature configuration requested by the user.
+            binding.configure(requestMsgCtx, this);
 
             // Setup the Executor that will be used to drive async responses back to 
             // the client.
@@ -474,6 +516,20 @@
             return true;
         else
             return false;
+    }
+
+    /*
+     * Configure any properties that will be needed on the Message
+     */
+    private void setupMessageProperties(Message msg) {
+        // If the user has enabled MTOM on the SOAPBinding, we need
+        // to make sure that gets pushed to the Message object.
+        Binding binding = (Binding) getBinding();
+        if (binding != null && binding instanceof SOAPBinding) {
+            SOAPBinding soapBinding = (SOAPBinding)binding;
+            if (soapBinding.isMTOMEnabled())
+                msg.setMTOMEnabled(true);
+        }
     }
 
     /*

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/client/proxy/JAXWSProxyHandler.java Wed Jul  4 15:02:44 2007
@@ -30,10 +30,10 @@
 import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.OperationDescription;
 import org.apache.axis2.jaxws.description.ServiceDescription;
-import org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigUtil;
 import org.apache.axis2.jaxws.i18n.Messages;
 import org.apache.axis2.jaxws.marshaller.factory.MethodMarshallerFactory;
 import org.apache.axis2.jaxws.message.Message;
+import org.apache.axis2.jaxws.spi.Binding;
 import org.apache.axis2.jaxws.spi.Constants;
 import org.apache.axis2.jaxws.spi.ServiceDelegate;
 import org.apache.axis2.jaxws.spi.migrator.ApplicationContextMigratorUtil;
@@ -43,6 +43,8 @@
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Response;
 import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.soap.SOAPBinding;
+
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
@@ -172,6 +174,15 @@
         request.setEndpointDescription(getEndpointDescription());
         request.setOperationDescription(operationDesc);
 
+        // Enable MTOM on the Message if the property was set on the SOAPBinding.
+        Binding bnd = (Binding) getBinding();
+        if (bnd != null && bnd instanceof SOAPBinding) {
+            if (((SOAPBinding)bnd).isMTOMEnabled()) {
+                Message requestMsg = request.getMessage();
+                requestMsg.setMTOMEnabled(true);
+            }
+        }
+        
         /*
          * TODO: review: make sure the handlers are set on the InvocationContext
          * This implementation of the JAXWS runtime does not use Endpoint, which
@@ -184,7 +195,7 @@
          */
         
         // be sure to use whatever handlerresolver is registered on the Service
-        requestIC.setHandlers(getBinding().getHandlerChain());
+        requestIC.setHandlers(bnd.getHandlerChain());
 
         requestIC.setRequestMessageContext(request);
         requestIC.setServiceClient(serviceDelegate.getServiceClient(endpointDesc.getPortQName()));
@@ -195,10 +206,8 @@
                 Constants.APPLICATION_CONTEXT_MIGRATOR_LIST_ID, 
                 getRequestContext(), request);
 
-        // Perform the client-side configuration, as specified during the invocation.
-        WebServiceFeatureConfigUtil.performConfiguration(
-                Constants.WEB_SERVICE_FEATURE_CONFIGURATOR_LIST_ID,
-                request, this);
+        // Perform the WebServiceFeature configuration requested by the user.
+        bnd.configure(request, this);
 
         // TODO: Change this to some form of factory so that we can change the IC to
         // a more simple one for marshaller/unmarshaller testing.

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/core/controller/AxisInvocationController.java Wed Jul  4 15:02:44 2007
@@ -488,7 +488,6 @@
             ops.setProperty(key, value);
         }
 
-        //TODO Do I have to leave this here or can I move it to the MTOMConfigurator.
         // Enable MTOM
         Message msg = mc.getMessage();
         if (msg.isMTOMEnabled()) {

Copied: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureConfigurator.java (from r551872, webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/util/WebServiceFeatureConfigurator.java)
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureConfigurator.java?view=diff&rev=553341&p1=webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/util/WebServiceFeatureConfigurator.java&r1=551872&p2=webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureConfigurator.java&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/util/WebServiceFeatureConfigurator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureConfigurator.java Wed Jul  4 15:02:44 2007
@@ -1,44 +1,44 @@
-/*
- * 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.axis2.jaxws.feature.util;
-
-import org.apache.axis2.jaxws.core.MessageContext;
-import org.apache.axis2.jaxws.description.ServiceDescription;
-import org.apache.axis2.jaxws.spi.BindingProvider;
-
-/**
- * 
- */
-public interface WebServiceFeatureConfigurator {
-
-    /**
-     * Perform client-side configuration for a <code>WebServiceFeature</code>.
-     * 
-     * @param messageContext
-     * @param provider
-     */
-    public void performConfiguration(MessageContext messageContext, BindingProvider provider);
-
-    /**
-     * Perform server-side configuration for a <code>WebServiceFeature</code>.
-     * 
-     * @param serviceDescription
-     */
-    public void performConfiguration(ServiceDescription serviceDescription);
-}
+/*
+ * 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.axis2.jaxws.feature;
+
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.spi.BindingProvider;
+
+/**
+ * 
+ */
+public interface WebServiceFeatureConfigurator {
+
+    /**
+     * Perform client-side configuration for a <code>WebServiceFeature</code>.
+     * 
+     * @param messageContext
+     * @param provider
+     */
+    public void configure(MessageContext messageContext, BindingProvider provider);
+
+    /**
+     * Perform server-side configuration for a <code>WebServiceFeature</code>.
+     * 
+     * @param endpointDescription
+     */
+    public void configure(EndpointDescription endpointDescription);
+}

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureValidator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureValidator.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureValidator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/WebServiceFeatureValidator.java Wed Jul  4 15:02:44 2007
@@ -19,77 +19,64 @@
 package org.apache.axis2.jaxws.feature;
 
 import org.apache.axis2.jaxws.ExceptionFactory;
-import org.apache.axis2.jaxws.addressing.SubmissionAddressingFeature;
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.spi.BindingProvider;
 
-import javax.xml.ws.RespectBindingFeature;
 import javax.xml.ws.WebServiceFeature;
-import javax.xml.ws.soap.AddressingFeature;
-import javax.xml.ws.soap.MTOMFeature;
 
 import java.util.IdentityHashMap;
 import java.util.Map;
 
 public class WebServiceFeatureValidator {
-    private static final WebServiceFeature DEFAULT_ADDRESSING_FEATURE = new AddressingFeature();
-    private static final WebServiceFeature DEFAULT_SUBMISSION_ADDRESSING_FEATURE = new SubmissionAddressingFeature();
-    private static final WebServiceFeature DEFAULT_MTOM_FEATURE = new MTOMFeature();
-    private static final WebServiceFeature DEFAULT_RESPECT_BINDING_FEATURE = new RespectBindingFeature();
-
-    private static final WebServiceFeature DEFAULT_CLIENT_SIDE_ADDRESSING_FEATURE = new AddressingFeature(false);
-    private static final WebServiceFeature DEFAULT_CLIENT_SIDE_SUBMISSION_ADDRESSING_FEATURE = new SubmissionAddressingFeature(false);
-    private static final WebServiceFeature DEFAULT_CLIENT_SIDE_MTOM_FEATURE = new MTOMFeature(false);
-
     private static final WebServiceFeature[] ZERO_LENGTH_ARRAY = new WebServiceFeature[0];
     
+    private Map<String, WebServiceFeatureConfigurator> configuratorMap;
     private Map<String, WebServiceFeature> featureMap;
     
-    public WebServiceFeatureValidator(boolean isServerSide) {
-        //Set up default WebServiceFeatures.
+    public WebServiceFeatureValidator() {
+        configuratorMap = new IdentityHashMap<String, WebServiceFeatureConfigurator>();
         featureMap = new IdentityHashMap<String, WebServiceFeature>();
-        
-        if (isServerSide) {
-            featureMap.put(AddressingFeature.ID, DEFAULT_ADDRESSING_FEATURE);
-            featureMap.put(SubmissionAddressingFeature.ID, DEFAULT_SUBMISSION_ADDRESSING_FEATURE);
-            featureMap.put(MTOMFeature.ID, DEFAULT_MTOM_FEATURE);
-        }
-        else {
-            featureMap.put(AddressingFeature.ID, DEFAULT_CLIENT_SIDE_ADDRESSING_FEATURE);
-            featureMap.put(SubmissionAddressingFeature.ID, DEFAULT_CLIENT_SIDE_SUBMISSION_ADDRESSING_FEATURE);
-            featureMap.put(MTOMFeature.ID, DEFAULT_CLIENT_SIDE_MTOM_FEATURE);            
-        }
-        
-        featureMap.put(RespectBindingFeature.ID, DEFAULT_RESPECT_BINDING_FEATURE);        
     }
-
-    public WebServiceFeatureValidator(boolean isServerSide, WebServiceFeature... features) {
-        this(isServerSide);
-        
-        if (features != null) {
-            for (WebServiceFeature feature : features) {
-                put(feature);
-            }
-        }
+    
+    public void addConfigurator(String id, WebServiceFeatureConfigurator configurator) {
+        configuratorMap.put(id, configurator);
     }
     
     public boolean isValid(WebServiceFeature feature) {
-        return featureMap.containsKey(feature.getID());
+        if (feature == null)
+            return false;
+        
+        return configuratorMap.containsKey(feature.getID());
     }
-
-    public void put(WebServiceFeature feature) {
-        if (feature != null) {
-            //TODO NLS enable.
-            if (!isValid(feature))
-                throw ExceptionFactory.makeWebServiceException("Unrecognized WebServiceFeature " + feature.getID());
-            
-            featureMap.put(feature.getID(), feature);            
-        }
+    
+    public void addFeature(WebServiceFeature feature) {
+        //TODO NLS enable.
+        if (!isValid(feature))
+            throw ExceptionFactory.makeWebServiceException("Unrecognized WebServiceFeature " + feature.getID());
+        
+        featureMap.put(feature.getID(), feature);
     }
     
-    public WebServiceFeature get(String featureID) {
-        return featureMap.get(featureID);
+    public WebServiceFeature getFeature(String id) {
+        return featureMap.get(id);
     }
     
-    public WebServiceFeature[] getAll() {
+    public WebServiceFeature[] getAllFeatures() {
         return featureMap.values().toArray(ZERO_LENGTH_ARRAY);
+    }
+    
+    public void configure(MessageContext messageContext, BindingProvider provider) {
+        for (WebServiceFeature feature : getAllFeatures()) {
+            WebServiceFeatureConfigurator configurator = configuratorMap.get(feature.getID());
+            configurator.configure(messageContext, provider);
+        }
+    }
+    
+    public void configure(EndpointDescription endpointDescription) {
+        for (WebServiceFeature feature : getAllFeatures()) {
+            WebServiceFeatureConfigurator configurator = configuratorMap.get(feature.getID());
+            configurator.configure(endpointDescription);
+        }
     }
 }

Copied: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/AddressingConfigurator.java (from r551872, webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/W3CAndSubmissionAddressingConfigurator.java)
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/AddressingConfigurator.java?view=diff&rev=553341&p1=webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/W3CAndSubmissionAddressingConfigurator.java&r1=551872&p2=webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/AddressingConfigurator.java&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/W3CAndSubmissionAddressingConfigurator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/AddressingConfigurator.java Wed Jul  4 15:02:44 2007
@@ -18,89 +18,157 @@
  */
 package org.apache.axis2.jaxws.feature.config;
 
-import java.util.Map;
-
-import javax.xml.ws.Binding;
 import javax.xml.ws.soap.AddressingFeature;
 
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.addressing.AddressingConstants.Final;
 import org.apache.axis2.addressing.AddressingConstants.Submission;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.addressing.SubmissionAddressingFeature;
-import org.apache.axis2.jaxws.binding.SOAPBinding;
 import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.ServiceDescription;
-import org.apache.axis2.jaxws.feature.WebServiceFeatureValidator;
-import org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator;
+import org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator;
+import org.apache.axis2.jaxws.spi.Binding;
 import org.apache.axis2.jaxws.spi.BindingProvider;
 
 /**
  *
  */
-public class W3CAndSubmissionAddressingConfigurator implements WebServiceFeatureConfigurator {
+public class AddressingConfigurator implements WebServiceFeatureConfigurator {
 
     /*
      *  (non-Javadoc)
-     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.core.MessageContext, org.apache.axis2.jaxws.spi.BindingProvider)
+     * @see org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator#configure(org.apache.axis2.jaxws.core.MessageContext, org.apache.axis2.jaxws.spi.BindingProvider)
      */
-    public void performConfiguration(MessageContext messageContext, BindingProvider provider) {
-        Binding bnd = provider.getBinding();
-        if (bnd instanceof SOAPBinding) {
-            WebServiceFeatureValidator validator = provider.getWebServiceFeatureValidator();
-            AddressingFeature addressingFeature =
-                (AddressingFeature) validator.get(AddressingFeature.ID);
-            SubmissionAddressingFeature submissionAddressingFeature =
-                (SubmissionAddressingFeature) validator.get(SubmissionAddressingFeature.ID);
-            Map<String, Object> properties = messageContext.getProperties();
+    public void configure(MessageContext messageContext, BindingProvider provider) {
+        Binding bnd = (Binding) provider.getBinding();
+        AddressingFeature addressingFeature =
+            (AddressingFeature) bnd.getWebServiceFeature(AddressingFeature.ID);
+        SubmissionAddressingFeature submissionAddressingFeature =
+            (SubmissionAddressingFeature) bnd.getWebServiceFeature(SubmissionAddressingFeature.ID);
+        String specifiedAddressingNamespace = provider.getAddressingNamespace();
+        String enabledAddressingNamespace =
+            (String) messageContext.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
+        Boolean disableAddressing =
+            (Boolean) messageContext.getProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES);
+        
+        //Figure out which WS-Addressing feature was specified causing this configurator to run. 
+        if (addressingFeature != null && submissionAddressingFeature != null) {
+            //Both features must have been specified.
+            boolean w3cAddressingEnabled = addressingFeature.isEnabled();
+            boolean submissionAddressingEnabled = submissionAddressingFeature.isEnabled();
             
-            if (addressingFeature.isEnabled() || submissionAddressingFeature.isEnabled()) {
-                String addressingNamespace = provider.getAddressingNamespace();
+            if (w3cAddressingEnabled && submissionAddressingEnabled) {
+                //If WS-Addressing has already been enabled then stop,
+                //as this configurator has probably already run once.
+                if (!disableAddressing)
+                    return;
+                
+                //If an EPR hasn't been specified then default to 2005/08 addressing,
+                //else use the namespace of the EPR.
+                if (specifiedAddressingNamespace == null)
+                    specifiedAddressingNamespace = Final.WSA_NAMESPACE;
+                
+                disableAddressing = Boolean.FALSE;
+            }
+            else if (w3cAddressingEnabled) {
+                //Enable only 2005/08 addressing
+                if (Submission.WSA_NAMESPACE.equals(specifiedAddressingNamespace))
+                    throw ExceptionFactory.makeWebServiceException("Illegal configuration.");
+                else
+                    specifiedAddressingNamespace = Final.WSA_NAMESPACE;
+                
+                disableAddressing = Boolean.FALSE;
+            }
+            else if (submissionAddressingEnabled) {
+                //Enable only 2004/08 addressing
+                if (Final.WSA_NAMESPACE.equals(specifiedAddressingNamespace))
+                    throw ExceptionFactory.makeWebServiceException("Illegal configuration.");
+                else
+                    specifiedAddressingNamespace = Submission.WSA_NAMESPACE;
+                
+                disableAddressing = Boolean.FALSE;
+            }
+            else {
+                //Disable 2005/08 and 2004/08 addressing
+                disableAddressing = Boolean.TRUE;
+            }                
+        }
+        else if (addressingFeature != null) {
+            //The AddressingFeature must have been specified.
+            boolean w3cAddressingEnabled = addressingFeature.isEnabled();
+
+            if (w3cAddressingEnabled) {
+                //Enable 2005/08 addressing
+                if (Submission.WSA_NAMESPACE.equals(specifiedAddressingNamespace))
+                    throw ExceptionFactory.makeWebServiceException("Illegal configuration.");
+                else
+                    specifiedAddressingNamespace = Final.WSA_NAMESPACE;
                 
-                //Make sure that the feature that has been enabled and the addressing namespace
-                //are consistent with each other.
-                if (addressingFeature.isEnabled() && !submissionAddressingFeature.isEnabled()) {
-                    //TODO NLS enable.
-                    if (!Final.WSA_NAMESPACE.equals(addressingNamespace))
-                        throw ExceptionFactory.makeWebServiceException("The namespace of the endpoint reference is different to the namespace of the addressing WebServiceFeature.");
-                }
-                
-                if (submissionAddressingFeature.isEnabled() && !addressingFeature.isEnabled()) {
-                    //TODO NLS enable.
-                    if (!Submission.WSA_NAMESPACE.equals(addressingNamespace))
-                        throw ExceptionFactory.makeWebServiceException("The namespace of the endpoint reference is different to the namespace of the submission addressing WebServiceFeature.");
-                }
-                
-                org.apache.axis2.context.MessageContext msgContext = messageContext.getAxisMessageContext();
-                msgContext.setTo(provider.getAxis2EndpointReference());
-                
-                try {
-                    ServiceDescription sd = messageContext.getEndpointDescription().getServiceDescription();
-                    AxisConfiguration axisConfig = sd.getAxisConfigContext().getAxisConfiguration();
-                    if (!axisConfig.isEngaged(Constants.MODULE_ADDRESSING))
-                        axisConfig.engageModule(Constants.MODULE_ADDRESSING);
-                }
-                catch (Exception e) {
-                    //TODO NLS enable.
-                    throw ExceptionFactory.makeWebServiceException("Unable to engage the addressing module.", e);
-                }
+                disableAddressing = Boolean.FALSE;
+            }
+            else {
+                //Disable 2005/08 addressing
+                if (enabledAddressingNamespace == null ||
+                        Final.WSA_NAMESPACE.equals(enabledAddressingNamespace))
+                    disableAddressing = Boolean.TRUE;
+            }                
+        }
+        else if (submissionAddressingFeature != null) {
+            //The SubmissionAddressingFeature must have been specified.
+            boolean submissionAddressingEnabled = submissionAddressingFeature.isEnabled();
+            
+            if (submissionAddressingEnabled) {
+                //Enable 2004/08 addressing
+                if (Final.WSA_NAMESPACE.equals(specifiedAddressingNamespace))
+                    throw ExceptionFactory.makeWebServiceException("Illegal configuration.");
+                else
+                    specifiedAddressingNamespace = Submission.WSA_NAMESPACE;
                 
-                properties.put(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.FALSE);
-                properties.put(AddressingConstants.WS_ADDRESSING_VERSION, addressingNamespace);                                
+                disableAddressing = Boolean.FALSE;
             }
             else {
-                properties.put(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
+                //Disable 2004/08 addressing
+                if (enabledAddressingNamespace == null ||
+                        Submission.WSA_NAMESPACE.equals(enabledAddressingNamespace))
+                    disableAddressing = Boolean.TRUE;
+            }                
+        }
+        else {
+            //If neither were specified then this configurator should never run.
+            throw ExceptionFactory.makeWebServiceException("Both WS-Addressing features were unspecified.");
+        }
+        
+        if (!disableAddressing) {
+            try {
+                EndpointReference epr = provider.getAxis2EndpointReference(specifiedAddressingNamespace);
+                org.apache.axis2.context.MessageContext axis2MessageContext = messageContext.getAxisMessageContext();
+                axis2MessageContext.setTo(epr);
+                
+                ServiceDescription sd = messageContext.getEndpointDescription().getServiceDescription();
+                AxisConfiguration axisConfig = sd.getAxisConfigContext().getAxisConfiguration();
+                if (!axisConfig.isEngaged(Constants.MODULE_ADDRESSING))
+                    axisConfig.engageModule(Constants.MODULE_ADDRESSING);
+            }
+            catch (Exception e) {
+                //TODO NLS enable.
+                throw ExceptionFactory.makeWebServiceException("Unable to engage the addressing module.", e);
             }
         }
+
+        messageContext.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, specifiedAddressingNamespace);                        
+        messageContext.setProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES, disableAddressing);
     }
 
     /*
      *  (non-Javadoc)
-     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.description.ServiceDescription)
+     * @see org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator#configure(org.apache.axis2.jaxws.description.EndpointDescription)
      */
-    public void performConfiguration(ServiceDescription serviceDescription) {
+    public void configure(EndpointDescription endpointDescription) {
         // TODO Auto-generated method stub
         
     }

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/MTOMConfigurator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/MTOMConfigurator.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/MTOMConfigurator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/MTOMConfigurator.java Wed Jul  4 15:02:44 2007
@@ -1,80 +1,67 @@
-/*
- * 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.axis2.jaxws.feature.config;
-
-import javax.xml.ws.Binding;
-import javax.xml.ws.soap.MTOMFeature;
-
-import org.apache.axis2.jaxws.binding.SOAPBinding;
-import org.apache.axis2.jaxws.core.MessageContext;
-import org.apache.axis2.jaxws.description.ServiceDescription;
-import org.apache.axis2.jaxws.feature.WebServiceFeatureValidator;
-import org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator;
-import org.apache.axis2.jaxws.message.Message;
-import org.apache.axis2.jaxws.spi.BindingProvider;
-
-/**
- *
- */
-public class MTOMConfigurator implements WebServiceFeatureConfigurator {
-
-    /*
-     *  (non-Javadoc)
-     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.core.MessageContext, org.apache.axis2.jaxws.spi.BindingProvider)
-     */
-    public void performConfiguration(MessageContext messageContext, BindingProvider provider) {
-        Binding bnd = provider.getBinding();
-        if (bnd instanceof SOAPBinding) {
-            WebServiceFeatureValidator validator = provider.getWebServiceFeatureValidator();
-            MTOMFeature mtomFeature = (MTOMFeature) validator.get(MTOMFeature.ID);
-            Message requestMsg = messageContext.getMessage();
-            
-            if (mtomFeature.isEnabled()) {
-                requestMsg.setMTOMEnabled(true);
-                
-                //TODO: Make use of the threshold somehow.
-                int threshold = mtomFeature.getThreshold();
-            }
-            
-            // If the user has enabled MTOM on the SOAPBinding, we need
-            // to make sure that gets pushed to the Message object.
-            if (((SOAPBinding)bnd).isMTOMEnabled()) {
-                requestMsg.setMTOMEnabled(true);
-            }
-
-            // Check if the user enabled MTOM using the SOAP binding 
-            // properties for MTOM
-            String bindingID = messageContext.getEndpointDescription().getClientBindingID();
-            if ((bindingID.equalsIgnoreCase(SOAPBinding.SOAP11HTTP_MTOM_BINDING) ||
-                    bindingID.equalsIgnoreCase(SOAPBinding.SOAP12HTTP_MTOM_BINDING)) &&
-                    !requestMsg.isMTOMEnabled()) {
-                requestMsg.setMTOMEnabled(true);
-            }
-        } 
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.description.ServiceDescription)
-     */
-    public void performConfiguration(ServiceDescription serviceDescription) {
-        // TODO Auto-generated method stub
-        
-    }
-}
+/*
+ * 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.axis2.jaxws.feature.config;
+
+import javax.xml.ws.soap.MTOMFeature;
+
+import org.apache.axis2.jaxws.ExceptionFactory;
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator;
+import org.apache.axis2.jaxws.message.Message;
+import org.apache.axis2.jaxws.spi.Binding;
+import org.apache.axis2.jaxws.spi.BindingProvider;
+
+/**
+ *
+ */
+public class MTOMConfigurator implements WebServiceFeatureConfigurator {
+
+    /*
+     *  (non-Javadoc)
+     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.core.MessageContext, org.apache.axis2.jaxws.spi.BindingProvider)
+     */
+    public void configure(MessageContext messageContext, BindingProvider provider) {
+        Binding bnd = (Binding) provider.getBinding();
+        MTOMFeature mtomFeature = (MTOMFeature) bnd.getWebServiceFeature(MTOMFeature.ID);
+        Message requestMsg = messageContext.getMessage();
+        
+        if (mtomFeature == null)
+            throw ExceptionFactory.makeWebServiceException("The MTOM features was unspecified.");
+        
+        if (mtomFeature.isEnabled()) {
+            requestMsg.setMTOMEnabled(true);
+            
+            //TODO: Make use of the threshold somehow.
+            int threshold = mtomFeature.getThreshold();
+        }
+        else {
+            requestMsg.setMTOMEnabled(false);
+        }
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator#configure(org.apache.axis2.jaxws.description.EndpointDescription)
+     */
+    public void configure(EndpointDescription endpointDescription) {
+        // TODO Auto-generated method stub
+        
+    }    
+}

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/RespectBindingConfigurator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/RespectBindingConfigurator.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/RespectBindingConfigurator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/feature/config/RespectBindingConfigurator.java Wed Jul  4 15:02:44 2007
@@ -1,49 +1,60 @@
-/*
- * 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.axis2.jaxws.feature.config;
-
-import org.apache.axis2.jaxws.core.MessageContext;
-import org.apache.axis2.jaxws.description.ServiceDescription;
-import org.apache.axis2.jaxws.feature.WebServiceFeatureValidator;
-import org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator;
-import org.apache.axis2.jaxws.spi.BindingProvider;
-
-/**
- *
- */
-public class RespectBindingConfigurator implements WebServiceFeatureConfigurator {
-
-    /*
-     *  (non-Javadoc)
-     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.core.MessageContext, org.apache.axis2.jaxws.spi.BindingProvider)
-     */
-    public void performConfiguration(MessageContext messageContext, BindingProvider provider) {
-        // TODO Auto-generated method stub
-        
-    }
-
-    /*
-     *  (non-Javadoc)
-     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.description.ServiceDescription)
-     */
-    public void performConfiguration(ServiceDescription serviceDescription) {
-        // TODO Auto-generated method stub
-        
-    }  
-}
+/*
+ * 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.axis2.jaxws.feature.config;
+
+import javax.xml.ws.RespectBindingFeature;
+
+import org.apache.axis2.jaxws.ExceptionFactory;
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator;
+import org.apache.axis2.jaxws.spi.Binding;
+import org.apache.axis2.jaxws.spi.BindingProvider;
+
+/**
+ *
+ */
+public class RespectBindingConfigurator implements WebServiceFeatureConfigurator {
+
+    /*
+     *  (non-Javadoc)
+     * @see org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator#performConfiguration(org.apache.axis2.jaxws.core.MessageContext, org.apache.axis2.jaxws.spi.BindingProvider)
+     */
+    public void configure(MessageContext messageContext, BindingProvider provider) {
+        Binding bnd = (Binding) provider.getBinding();
+        RespectBindingFeature respectBindingFeature =
+            (RespectBindingFeature) bnd.getWebServiceFeature(RespectBindingFeature.ID);
+        
+        if (respectBindingFeature == null)
+            throw ExceptionFactory.makeWebServiceException("The respect binding features was unspecified.");
+        
+        if (respectBindingFeature.isEnabled()) {
+            //TODO Implementation required.
+        }
+    }
+
+    /*
+     *  (non-Javadoc)
+     * @see org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator#configure(org.apache.axis2.jaxws.description.EndpointDescription)
+     */
+    public void configure(EndpointDescription endpointDescription) {
+        // TODO Auto-generated method stub
+        
+    }
+}

Added: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/Binding.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/Binding.java?view=auto&rev=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/Binding.java (added)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/Binding.java Wed Jul  4 15:02:44 2007
@@ -0,0 +1,34 @@
+/*
+ * 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.axis2.jaxws.spi;
+
+import javax.xml.ws.WebServiceFeature;
+
+import org.apache.axis2.jaxws.core.MessageContext;
+
+/**
+ * 
+ */
+public interface Binding extends javax.xml.ws.Binding {
+    public void setWebServiceFeatures(WebServiceFeature... features);
+    
+    public WebServiceFeature getWebServiceFeature(String id);
+    
+    public void configure(MessageContext messageContext, BindingProvider provider);
+}

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/BindingProvider.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/BindingProvider.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/BindingProvider.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/BindingProvider.java Wed Jul  4 15:02:44 2007
@@ -18,9 +18,9 @@
  */
 package org.apache.axis2.jaxws.spi;
 
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.jaxws.description.EndpointDescription;
-import org.apache.axis2.jaxws.feature.WebServiceFeatureValidator;
 
 /**
  * 
@@ -29,10 +29,8 @@
     public EndpointDescription getEndpointDescription();
 
     public ServiceDelegate getServiceDelegate();
-
-    public EndpointReference getAxis2EndpointReference();
     
-    public String getAddressingNamespace();
+    public EndpointReference getAxis2EndpointReference(String addressingNamespace) throws AxisFault;
     
-    public WebServiceFeatureValidator getWebServiceFeatureValidator();
+    public String getAddressingNamespace();
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java?view=diff&rev=553341&r1=553340&r2=553341
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java Wed Jul  4 15:02:44 2007
@@ -23,7 +23,6 @@
 import org.apache.axis2.client.ServiceClient;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.java.security.AccessController;
-import org.apache.axis2.jaxws.binding.BindingImpl;
 import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.addressing.factory.EndpointReferenceFactory;
 import org.apache.axis2.jaxws.addressing.util.EndpointReferenceConverter;
@@ -35,13 +34,7 @@
 import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.ServiceDescription;
 import org.apache.axis2.jaxws.description.ServiceDescriptionWSDL;
-import org.apache.axis2.jaxws.feature.config.MTOMConfigurator;
-import org.apache.axis2.jaxws.feature.config.RespectBindingConfigurator;
-import org.apache.axis2.jaxws.feature.config.W3CAndSubmissionAddressingConfigurator;
-import org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigUtil;
-import org.apache.axis2.jaxws.feature.util.WebServiceFeatureConfigurator;
 import org.apache.axis2.jaxws.i18n.Messages;
-import org.apache.axis2.jaxws.spi.migrator.ApplicationContextMigrator;
 import org.apache.axis2.jaxws.registry.FactoryRegistry;
 import org.apache.axis2.jaxws.spi.migrator.ApplicationContextMigratorUtil;
 import org.apache.axis2.jaxws.util.WSDLWrapper;
@@ -60,8 +53,6 @@
 import javax.xml.ws.WebServiceFeature;
 import javax.xml.ws.Service.Mode;
 import javax.xml.ws.WebServiceException;
-import javax.xml.ws.http.HTTPBinding;
-import javax.xml.ws.soap.SOAPBinding;
 import java.lang.reflect.Proxy;
 import java.net.URL;
 import java.security.PrivilegedActionException;
@@ -74,10 +65,6 @@
  * javax.xml.ws.Service} API.  This is the plug point for the client implementation.
  */
 public class ServiceDelegate extends javax.xml.ws.spi.ServiceDelegate {
-    private static final WebServiceFeatureConfigurator[] CONFIGURATORS = {
-        new W3CAndSubmissionAddressingConfigurator(), new MTOMConfigurator(), new RespectBindingConfigurator()};
-    private static final ApplicationContextMigrator[] MIGRATORS = {new PropertyMigrator()};
-    
     private static final Log log = LogFactory.getLog(ServiceDelegate.class);
     private Executor executor;
 
@@ -109,16 +96,8 @@
         ConfigurationContext context = serviceDescription.getAxisConfigContext();
 
         // Register the necessary ApplicationContextMigrators
-        for (ApplicationContextMigrator migrator : MIGRATORS) {
-            ApplicationContextMigratorUtil.addApplicationContextMigrator(context,
-                    Constants.APPLICATION_CONTEXT_MIGRATOR_LIST_ID, migrator);
-        }
-        
-        // Register our WebServiceFeature configurators.
-//        for (WebServiceFeatureConfigurator configurator : CONFIGURATORS) {
-//            WebServiceFeatureConfigUtil.addWebServiceFeatureConfigurator(context,
-//                    Constants.WEB_SERVICE_FEATURE_CONFIGURATOR_LIST_ID, configurator);            
-//        }
+        ApplicationContextMigratorUtil.addApplicationContextMigrator(context,
+                Constants.APPLICATION_CONTEXT_MIGRATOR_LIST_ID, new PropertyMigrator());
     }
 
     //================================================
@@ -195,9 +174,6 @@
 
         XMLDispatch<T> dispatch = new XMLDispatch<T>(this, endpointDesc, axis2EPR, addressingNamespace, features);
 
-        // FIXME: This call needs to be revisited.  Not really sure what we're trying to do here.
-        dispatch.setBinding(addBinding(endpointDesc, endpointDesc.getClientBindingID()));
-
         if (mode != null) {
             dispatch.setMode(mode);
         } else {
@@ -241,7 +217,6 @@
         }
 
         JAXBDispatch<Object> dispatch = new JAXBDispatch(this, endpointDesc, axis2EPR, addressingNamespace, features);
-        dispatch.setBinding(addBinding(endpointDesc, endpointDesc.getClientBindingID()));
 
         if (mode != null) {
             dispatch.setMode(mode);
@@ -279,8 +254,6 @@
 
         XMLDispatch<T> dispatch = new XMLDispatch<T>(this, endpointDesc, features);
 
-        // FIXME: This call needs to be revisited.  Not really sure what we're trying to do here. 
-        dispatch.setBinding(addBinding(endpointDesc, endpointDesc.getClientBindingID()));
         if (mode != null) {
             dispatch.setMode(mode);
         } else {
@@ -311,7 +284,6 @@
         }
 
         JAXBDispatch<Object> dispatch = new JAXBDispatch(this, endpointDesc, features);
-        dispatch.setBinding(addBinding(endpointDesc, endpointDesc.getClientBindingID()));
 
         if (mode != null) {
             dispatch.setMode(mode);
@@ -593,28 +565,6 @@
 
     private boolean isServiceDefined(QName serviceName) {
         return getWSDLWrapper().getService(serviceName) != null;
-    }
-
-    private BindingImpl addBinding(EndpointDescription endpointDesc, String bindingId) {
-        // TODO: before creating binding do I have to do something with Handlers ... how is Binding related to Handler, this mistry sucks!!!
-        if (bindingId != null) {
-            //TODO: create all the bindings here
-            if (bindingId.equals(SOAPBinding.SOAP11HTTP_BINDING)) {
-                //instantiate soap11 binding implementation here and call setBinding in BindingProvider
-                return new org.apache.axis2.jaxws.binding.SOAPBinding(endpointDesc);
-            }
-
-            if (bindingId.equals(SOAPBinding.SOAP12HTTP_BINDING)) {
-                //instantiate soap11 binding implementation here and call setBinding in BindingProvider
-                return new org.apache.axis2.jaxws.binding.SOAPBinding(endpointDesc);
-            }
-
-            if (bindingId.equals(HTTPBinding.HTTP_BINDING)) {
-                //instantiate http binding implementation here and call setBinding in BindingProvider
-                return new org.apache.axis2.jaxws.binding.HTTPBinding(endpointDesc);
-            }
-        } 
-        return new org.apache.axis2.jaxws.binding.SOAPBinding(endpointDesc);
     }
 
     private boolean isValidDispatchType(Class clazz) {



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org


Mime
View raw message