You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ba...@apache.org on 2010/04/12 23:04:49 UTC

svn commit: r933413 - in /axis/axis2/java/core/trunk/modules: jaxws/src/org/apache/axis2/jaxws/ jaxws/src/org/apache/axis2/jaxws/binding/ jaxws/test/org/apache/axis2/jaxws/spi/ metadata/src/org/apache/axis2/jaxws/description/ metadata/src/org/apache/ax...

Author: barrettj
Date: Mon Apr 12 21:04:49 2010
New Revision: 933413

URL: http://svn.apache.org/viewvc?rev=933413&view=rev
Log:
Add support for RespectBinding feature set via a sparse composite (such as via a deployment descriptor).  Add associated TDD test.

Added:
    axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataRespectBindingFeatureTests.java
Modified:
    axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
    axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java
    axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataMTOMFeatureTests.java
    axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
    axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java

Modified: axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java?rev=933413&r1=933412&r2=933413&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java (original)
+++ axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java Mon Apr 12 21:04:49 2010
@@ -122,37 +122,9 @@ public class BindingProvider implements 
             }
         }
 
-        // See if the metadata from creating the service indicates that MTOM should be enabled
+        // See if the metadata from creating the service indicates that MTOM and/or RespectBinding should be enabled
         if (binding instanceof SOAPBinding) {
-            // MTOM can be enabled either at the ServiceDescription level (via the WSDL binding type) or
-            // at the EndpointDescription level via the binding type used to create a Dispatch.
-            boolean enableMTOMFromMetadata = false;
-            int mtomThreshold = 0;
-            
-            // if we have an SEI for the port, then we'll use it in order to search for MTOM configuration
-            if(endpointDesc.getEndpointInterfaceDescription() != null
-                    &&
-                    endpointDesc.getEndpointInterfaceDescription().getSEIClass() != null) {
-                enableMTOMFromMetadata = endpointDesc.getServiceDescription().isMTOMEnabled(serviceDelegate, 
-                                                                   endpointDesc.getEndpointInterfaceDescription().getSEIClass());
-                mtomThreshold = getMTOMThreshold(endpointDesc.getServiceDescription(), serviceDelegate,
-                        endpointDesc.getEndpointInterfaceDescription().getSEIClass());
-            }
-            else {
-                enableMTOMFromMetadata = endpointDesc.getServiceDescription().isMTOMEnabled(serviceDelegate);
-                // Threshold does not need to be set here based on the sparse composite (i.e. depolyment descriptor)
-                // since it can only be applied to a port injection (i.e. an SEI) using a DD.
-            }
-            if (!enableMTOMFromMetadata) {
-                String bindingType = endpointDesc.getClientBindingID();
-                enableMTOMFromMetadata = (bindingType.equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING) || 
-                                          bindingType.equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING));
-            }
-            
-            if (enableMTOMFromMetadata) {
-                ((SOAPBinding) binding).setMTOMEnabled(true);
-                ((SOAPBinding) binding).setMTOMThreshold(mtomThreshold);
-            }
+            configureBindingFromMetadata();
         }
                 
         // check for properties that need to be set on the BindingProvider
@@ -186,6 +158,55 @@ public class BindingProvider implements 
         }
     }
 
+    /**
+     * Configure the binding from the Metadata for MTOM and RespectBinding.
+     */
+    private void configureBindingFromMetadata() {
+        // MTOM can be enabled either at the ServiceDescription level (via the WSDL binding type) or
+        // at the EndpointDescription level via the binding type used to create a Dispatch.
+        boolean enableMTOMFromMetadata = false;
+        int mtomThreshold = 0;
+        boolean enableRespectBindingdFromMetadata = false;
+        
+        // if we have an SEI for the port, then we'll use it in order to search for MTOM configuration
+        if(endpointDesc.getEndpointInterfaceDescription() != null
+                &&
+                endpointDesc.getEndpointInterfaceDescription().getSEIClass() != null) {
+            enableMTOMFromMetadata = endpointDesc.getServiceDescription().isMTOMEnabled(serviceDelegate, 
+                                                               endpointDesc.getEndpointInterfaceDescription().getSEIClass());
+            mtomThreshold = getMTOMThreshold(endpointDesc.getServiceDescription(), serviceDelegate,
+                    endpointDesc.getEndpointInterfaceDescription().getSEIClass());
+
+            enableRespectBindingdFromMetadata = isRespectBindingEnabled(endpointDesc.getServiceDescription(), serviceDelegate,
+                    endpointDesc.getEndpointInterfaceDescription().getSEIClass());
+        }
+        else {
+            enableMTOMFromMetadata = endpointDesc.getServiceDescription().isMTOMEnabled(serviceDelegate);
+            // Threshold & RespectBinding does not need to be set here based on the sparse composite (i.e. depolyment descriptor)
+            // since it can only be applied to a port injection (i.e. an SEI) using a DD.
+        }
+        if (!enableMTOMFromMetadata) {
+            String bindingType = endpointDesc.getClientBindingID();
+            enableMTOMFromMetadata = (bindingType.equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING) || 
+                                      bindingType.equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING));
+        }
+        
+        if (enableMTOMFromMetadata) {
+            ((SOAPBinding) binding).setMTOMEnabled(true);
+            ((SOAPBinding) binding).setMTOMThreshold(mtomThreshold);
+        }
+        
+        if (enableRespectBindingdFromMetadata) {
+            ((SOAPBinding) binding).setRespectBindingEnabled(true);
+        }
+    }
+
+    private boolean isRespectBindingEnabled(ServiceDescription serviceDescription, ServiceDelegate serviceDelegateKey, 
+            Class seiClass) {
+        boolean isEnabled = serviceDescription.isRespectBindingEnabled(serviceDelegateKey, seiClass);
+        return isEnabled;
+    }
+
     private int getMTOMThreshold(ServiceDescription serviceDescription, ServiceDelegate serviceDelegate, Class seiClass) {
         int threshold = serviceDescription.getMTOMThreshold(serviceDelegate, seiClass);
         

Modified: axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java?rev=933413&r1=933412&r2=933413&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java (original)
+++ axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/binding/SOAPBinding.java Mon Apr 12 21:04:49 2010
@@ -44,6 +44,7 @@ import java.util.Set;
 public class SOAPBinding extends BindingImpl implements javax.xml.ws.soap.SOAPBinding {
     private boolean mtomEnabled = false;
     private int mtomThreshold = 0;
+    private boolean respectBindingEnabled = false;
 
     private static Log log = LogFactory.getLog(SOAPBinding.class);
     
@@ -61,6 +62,12 @@ public class SOAPBinding extends Binding
     public void setMTOMThreshold(int threshold) {
         mtomThreshold = threshold;
     }
+    public boolean isRespectBindingEnabled() {
+        return respectBindingEnabled;
+    }
+    public void setRespectBindingEnabled(boolean enabled) {
+        respectBindingEnabled = enabled;
+    }
     /*
      * (non-Javadoc)
      * 

Modified: axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataMTOMFeatureTests.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataMTOMFeatureTests.java?rev=933413&r1=933412&r2=933413&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataMTOMFeatureTests.java (original)
+++ axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataMTOMFeatureTests.java Mon Apr 12 21:04:49 2010
@@ -37,7 +37,8 @@ import java.util.Map;
 import junit.framework.TestCase;
 
 /**
- * Validate the setting up of the MTOM WebServiceFeature via meta-data (such as a deployment descriptor)
+ * Validate the setting up of the MTOM WebServiceFeature on the client side via meta-data 
+ * (such as a deployment descriptor)
  */
 public class ClientMetadataMTOMFeatureTests extends TestCase {
     static final String namespaceURI = "http://description.jaxws.axis2.apache.org";
@@ -283,7 +284,8 @@ public class ClientMetadataMTOMFeatureTe
     }
     
     /**
-     * Validate if there are multiple instances of the same feature for a port in the list, the last one is used.
+     * Validate if there are multiple instances of the same feature for a port in the list indicating
+     * a threshold, the last one is used.
      */
     public void testMultipleFeaturesForPortThreshold() {
         QName serviceQName = new QName(namespaceURI, svcLocalPart);
@@ -318,7 +320,11 @@ public class ClientMetadataMTOMFeatureTe
         assertEquals("Threashold value incorrect", MTOM_THRESHOLD, enabledSoapBinding.getMTOMThreshold());
     }
     
-    public void testMultipoleFeaturesForPortEnable() {
+    /**
+     * Validate if there are multiple instances of the same feature for a port in the list indicating
+     * enablement, the last one is used.
+     */
+    public void testMultipleFeaturesForPortEnable() {
         QName serviceQName = new QName(namespaceURI, svcLocalPart);
         URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl);
         DescriptionBuilderComposite serviceDBC = new DescriptionBuilderComposite();
@@ -347,7 +353,7 @@ public class ClientMetadataMTOMFeatureTe
         ClientMetadataMTOMPortSEI enabledPort = service.getPort(portQN1, ClientMetadataMTOMPortSEI.class);
         BindingProvider enabledBindingProvider = (BindingProvider) enabledPort;
         SOAPBinding enabledSoapBinding = (SOAPBinding) enabledBindingProvider.getBinding();
-        assertFalse("MTOM is not enabled", enabledSoapBinding.isMTOMEnabled());
+        assertFalse("MTOM is enabled and should not be", enabledSoapBinding.isMTOMEnabled());
     }
 
     /**

Added: axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataRespectBindingFeatureTests.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataRespectBindingFeatureTests.java?rev=933413&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataRespectBindingFeatureTests.java (added)
+++ axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataRespectBindingFeatureTests.java Mon Apr 12 21:04:49 2010
@@ -0,0 +1,229 @@
+/*
+ * 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 org.apache.axis2.jaxws.binding.SOAPBinding;
+import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
+import org.apache.axis2.jaxws.description.builder.MDQConstants;
+import org.apache.axis2.jaxws.description.builder.MTOMAnnot;
+import org.apache.axis2.jaxws.description.builder.RespectBindingAnnot;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+/**
+ * Validate the setting up of the RespectBinding WebServiceFeature on the client side via meta-data 
+ * (such as a deployment descriptor)
+ */
+public class ClientMetadataRespectBindingFeatureTests extends TestCase {
+    static final String namespaceURI = "http://description.jaxws.axis2.apache.org";
+    static final String svcLocalPart = "svcLocalPart";
+    static final String multiPortWsdl = "ClientMetadataMultiPort.wsdl";
+    static final String multiPortWsdl_portLocalPart1 = "portLocalPartMulti1";
+    static final String multiPortWsdl_portLocalPart2 = "portLocalPartMulti2";
+    
+    /**
+     * Validate that RespectBinding can be enabled via a sparse composite on the service.
+     */
+    public void testRespectBindingEnabled() {
+        Service service = createService();
+        ClientMetadataRespectBindingPortSEI port = service.getPort(ClientMetadataRespectBindingPortSEI.class);
+        
+        BindingProvider bindingProvider = (BindingProvider) port;
+        SOAPBinding soapBinding = (SOAPBinding) bindingProvider.getBinding();
+        assertTrue("RespectBinding is not enabled", soapBinding.isRespectBindingEnabled());
+    }
+    
+    /**
+     * Validate that RespectBinding is disabled (by default) for a port that does not specify the feature.
+     */
+    public void testRespectBindingDefault() {
+        Service service = createService();
+        ClientMetadataRespectBindingPortSEI2 port = service.getPort(ClientMetadataRespectBindingPortSEI2.class);
+        
+        BindingProvider bindingProvider = (BindingProvider) port;
+        SOAPBinding soapBinding = (SOAPBinding) bindingProvider.getBinding();
+        assertFalse("RespectBinding is enabled and should not be", soapBinding.isRespectBindingEnabled());
+        
+    }
+    
+    /**
+     * Validate that RespectBinding can be enabled on some ports and not others by explicitly setting the features.
+     */
+    public void testRespectBindingEnableSomeNotOthersExplicitly() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl);
+        DescriptionBuilderComposite serviceDBC = new DescriptionBuilderComposite();
+        
+        Map<String, List<Annotation>> map = new HashMap();
+        
+        ArrayList<Annotation> wsFeatures = new ArrayList<Annotation>();
+        // Enable RespectBinding explicitly on one port
+        RespectBindingAnnot respectBindingFeature = new RespectBindingAnnot();
+        respectBindingFeature.setEnabled(true);
+        wsFeatures.add(respectBindingFeature);
+        map.put(ClientMetadataRespectBindingPortSEI.class.getName(), wsFeatures);
+        
+        // Disable RespectBinding explicitly on a different port
+        ArrayList<Annotation> wsFeatures2 = new ArrayList<Annotation>();
+        RespectBindingAnnot respectBindingFeatureDisable = new RespectBindingAnnot();
+        respectBindingFeatureDisable.setEnabled(false);
+        wsFeatures2.add(respectBindingFeatureDisable);
+        map.put(ClientMetadataRespectBindingPortSEI2.class.getName(), wsFeatures2);
+        
+        serviceDBC.getProperties().put(MDQConstants.SEI_FEATURES_MAP, map);
+        ServiceDelegate.setServiceMetadata(serviceDBC);
+        Service service = Service.create(wsdlUrl, serviceQName);
+
+        // Validate that RespectBinding is enabled on one port and disabled on the other
+        QName portQN1 = new QName(namespaceURI, multiPortWsdl_portLocalPart1);
+        QName portQN2 = new QName(namespaceURI, multiPortWsdl_portLocalPart2);
+
+        ClientMetadataRespectBindingPortSEI enabledPort = service.getPort(portQN1, ClientMetadataRespectBindingPortSEI.class);
+        BindingProvider enabledBindingProvider = (BindingProvider) enabledPort;
+        SOAPBinding enabledSoapBinding = (SOAPBinding) enabledBindingProvider.getBinding();
+        assertTrue("RespectBinding is not enabled", enabledSoapBinding.isRespectBindingEnabled());
+        
+        ClientMetadataRespectBindingPortSEI2 disabledPort = service.getPort(portQN2, ClientMetadataRespectBindingPortSEI2.class);
+        BindingProvider disabledBindingProvider = (BindingProvider) disabledPort;
+        SOAPBinding disabledSoapBinding = (SOAPBinding) disabledBindingProvider.getBinding();
+        assertFalse("RespectBinding is enabled and should not be", disabledSoapBinding.isRespectBindingEnabled());
+    }
+    
+    /**
+     * Validate that RespectBinding can be enabled on some ports and not others by not specifying the RespectBinding feature
+     * on the ports it should not be enabled on.
+     */
+    public void testRespectBindingEnableSomeNotOthersUnspecified() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl);
+        DescriptionBuilderComposite serviceDBC = new DescriptionBuilderComposite();
+        
+        Map<String, List<Annotation>> map = new HashMap();
+        
+        ArrayList<Annotation> wsFeatures = new ArrayList<Annotation>();
+        // Enable RespectBinding explicitly on one port
+        RespectBindingAnnot respectBindingFeature = new RespectBindingAnnot();
+        respectBindingFeature.setEnabled(true);
+        wsFeatures.add(respectBindingFeature);
+        map.put(ClientMetadataRespectBindingPortSEI.class.getName(), wsFeatures);
+        
+        // Do not specify the RespectBinding feature for the other port
+        
+        serviceDBC.getProperties().put(MDQConstants.SEI_FEATURES_MAP, map);
+        ServiceDelegate.setServiceMetadata(serviceDBC);
+        Service service = Service.create(wsdlUrl, serviceQName);
+
+        // Validate that RespectBinding is enabled on one port and disabled on the other
+        QName portQN1 = new QName(namespaceURI, multiPortWsdl_portLocalPart1);
+        QName portQN2 = new QName(namespaceURI, multiPortWsdl_portLocalPart2);
+
+        ClientMetadataRespectBindingPortSEI enabledPort = service.getPort(portQN1, ClientMetadataRespectBindingPortSEI.class);
+        BindingProvider enabledBindingProvider = (BindingProvider) enabledPort;
+        SOAPBinding enabledSoapBinding = (SOAPBinding) enabledBindingProvider.getBinding();
+        assertTrue("RespectBinding is not enabled", enabledSoapBinding.isRespectBindingEnabled());
+        
+        ClientMetadataRespectBindingPortSEI2 disabledPort = service.getPort(portQN2, ClientMetadataRespectBindingPortSEI2.class);
+        BindingProvider disabledBindingProvider = (BindingProvider) disabledPort;
+        SOAPBinding disabledSoapBinding = (SOAPBinding) disabledBindingProvider.getBinding();
+        assertFalse("RespectBinding is enabled and should not be", disabledSoapBinding.isRespectBindingEnabled());
+    }
+    
+    /**
+     * Validate if there are multiple instances of the same feature for a port in the list indicating
+     * enablement, the last one is used.
+     */
+    public void testMultipleFeaturesForPortEnable() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl);
+        DescriptionBuilderComposite serviceDBC = new DescriptionBuilderComposite();
+        
+        Map<String, List<Annotation>> map = new HashMap();
+        
+        ArrayList<Annotation> wsFeatures = new ArrayList<Annotation>();
+        // Enable RespectBinding explicitly then add another feature that disables it explicitly.
+        RespectBindingAnnot respectBindingFeature = new RespectBindingAnnot();
+        respectBindingFeature.setEnabled(true);
+        wsFeatures.add(respectBindingFeature);
+        
+        RespectBindingAnnot mtomFeature2 = new RespectBindingAnnot();
+        mtomFeature2.setEnabled(false);
+        wsFeatures.add(mtomFeature2);
+
+        map.put(ClientMetadataRespectBindingPortSEI.class.getName(), wsFeatures);
+
+        serviceDBC.getProperties().put(MDQConstants.SEI_FEATURES_MAP, map);
+        ServiceDelegate.setServiceMetadata(serviceDBC);
+        Service service = Service.create(wsdlUrl, serviceQName);
+
+        QName portQN1 = new QName(namespaceURI, multiPortWsdl_portLocalPart1);
+
+        ClientMetadataRespectBindingPortSEI enabledPort = service.getPort(portQN1, ClientMetadataRespectBindingPortSEI.class);
+        BindingProvider enabledBindingProvider = (BindingProvider) enabledPort;
+        SOAPBinding enabledSoapBinding = (SOAPBinding) enabledBindingProvider.getBinding();
+        assertFalse("RespectBinding is enabled and should not be", enabledSoapBinding.isRespectBindingEnabled());
+    }
+
+    
+    /**
+     * Create a service as would be done via injection or lookup, including a sparse composite that 
+     * contains features (as might be set by a deployment descriptor).
+     * 
+     * @return a Service created as done via injection or lookup.
+     */
+    private Service createService() {
+        // Even for a port injection or lookup, the service will also be treated as an injection or lookup
+        // So we need to setup the sparse DBC to create the service
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        URL wsdlUrl = ClientMetadataTest.getWsdlURL(multiPortWsdl);
+        DescriptionBuilderComposite serviceDBC = new DescriptionBuilderComposite();
+        
+        Map<String, List<Annotation>> map = new HashMap();
+        ArrayList<Annotation> wsFeatures = new ArrayList<Annotation>();
+        RespectBindingAnnot respectBindingFeature = new RespectBindingAnnot();
+        respectBindingFeature.setEnabled(true);
+        wsFeatures.add(respectBindingFeature);
+        map.put(ClientMetadataRespectBindingPortSEI.class.getName(), wsFeatures);
+        serviceDBC.getProperties().put(MDQConstants.SEI_FEATURES_MAP, map);
+        ServiceDelegate.setServiceMetadata(serviceDBC);
+        Service service = Service.create(wsdlUrl, serviceQName);
+        return service;
+    }
+
+}
+
+@WebService(name="EchoMessagePortType", targetNamespace="http://description.jaxws.axis2.apache.org")
+interface ClientMetadataRespectBindingPortSEI {
+    public String echoMessage(String string);
+}
+
+@WebService(name="EchoMessagePortType", targetNamespace="http://description.jaxws.axis2.apache.org")
+interface ClientMetadataRespectBindingPortSEI2 {
+    public String echoMessage(String string);
+}

Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java?rev=933413&r1=933412&r2=933413&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java (original)
+++ axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/ServiceDescription.java Mon Apr 12 21:04:49 2010
@@ -222,9 +222,19 @@ public interface ServiceDescription {
      * descriptor).
      * 
      * @param serviceDelegateKey The instance of the service delegate related to this service
-     * @param seiClass The SEI for the port to retried the MTOM threshold for
-     * @return the MTOM thredhold if set, or 0 if not set.
+     * @param seiClass The SEI for the port to retrieve the MTOM threshold for
+     * @return the MTOM threshold if set, or 0 if not set.
      */
     public int getMTOMThreshold(Object serviceDelegateKey, Class seiClass);
 
+    /**
+     * Return whether RespectBinding is enabled as set by the Client via a sparse composite (such as a client deployment
+     * descriptor).
+     * 
+     * @param serviceDelegateKey The instance of the service delegate related to this service
+     * @param seiClass The SEI for the port to retrieve the RespectBinding setting for.
+     * @return true if RespectBinding is enabled; false otherwise.
+     */
+    public abstract boolean isRespectBindingEnabled(Object serviceDelegateKey, Class seiClass);
+
 }

Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java?rev=933413&r1=933412&r2=933413&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/ServiceDescriptionImpl.java Mon Apr 12 21:04:49 2010
@@ -40,6 +40,7 @@ import org.apache.axis2.jaxws.descriptio
 import org.apache.axis2.jaxws.description.builder.MDQConstants;
 import org.apache.axis2.jaxws.description.builder.MTOMAnnot;
 import org.apache.axis2.jaxws.description.builder.PortComposite;
+import org.apache.axis2.jaxws.description.builder.RespectBindingAnnot;
 
 import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_FUTURE;
 import static org.apache.axis2.jaxws.description.builder.MDQConstants.RETURN_TYPE_RESPONSE;
@@ -2942,4 +2943,23 @@ public class ServiceDescriptionImpl
         }
         return featureList;
     }
+
+    public boolean isRespectBindingEnabled(Object serviceDelegateKey, Class seiClass) {
+        boolean enabled = false;
+        List<Annotation> seiFeatureList = getSEIFeatureList(serviceDelegateKey, seiClass);
+        if (log.isDebugEnabled()) {
+            log.debug("Feature list for delegate: " + serviceDelegateKey + ", and SEI: " + seiClass
+                    + ", is: " + seiFeatureList);
+        }
+        if (seiFeatureList != null) {
+            for (int i = 0; i < seiFeatureList.size(); i++) {
+                Annotation checkAnnotation = seiFeatureList.get(i);
+                if (checkAnnotation instanceof RespectBindingAnnot) {
+                    RespectBindingAnnot respectBindingAnnot = (RespectBindingAnnot) checkAnnotation;
+                    enabled = respectBindingAnnot.enabled();
+                }
+            }
+        }
+        return enabled;
+    }
 }