You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ng...@apache.org on 2008/01/22 20:36:07 UTC

svn commit: r614296 - in /webservices/axis2/branches/java/jaxws21/modules: kernel/src/org/apache/axis2/ metadata/src/org/apache/axis2/jaxws/description/ metadata/src/org/apache/axis2/jaxws/description/builder/ metadata/src/org/apache/axis2/jaxws/descri...

Author: ngallardo
Date: Tue Jan 22 11:36:04 2008
New Revision: 614296

URL: http://svn.apache.org/viewvc?rev=614296&view=rev
Log:
AXIS2-3448

Initial enablement for @MTOM annotation.

Added:
    webservices/axis2/branches/java/jaxws21/modules/metadata/test/org/apache/axis2/jaxws/description/feature/
    webservices/axis2/branches/java/jaxws21/modules/metadata/test/org/apache/axis2/jaxws/description/feature/MTOMFeatureTests.java
Modified:
    webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/Constants.java
    webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java
    webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java
    webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/ConverterUtils.java
    webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaClassToDBCConverter.java
    webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
    webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/server/config/MTOMConfigurator.java

Modified: webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/Constants.java?rev=614296&r1=614295&r2=614296&view=diff
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/kernel/src/org/apache/axis2/Constants.java Tue Jan 22 11:36:04 2008
@@ -265,6 +265,7 @@
 
         //Attachment configurations
         public static final String ENABLE_MTOM = "enableMTOM";
+        public static final String MTOM_THRESHOLD = "mtomThreshold";
         public static final String CACHE_ATTACHMENTS = "cacheAttachments";
         public static final String ATTACHMENT_TEMP_DIR = "attachmentDIR";
         public static final String FILE_SIZE_THRESHOLD = "sizeThreshold";

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java?rev=614296&r1=614295&r2=614296&view=diff
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/EndpointDescription.java Tue Jan 22 11:36:04 2008
@@ -136,11 +136,27 @@
     public abstract QName getServiceQName();
 
     public abstract Service.Mode getServiceMode();
-
+    
+    /**
+     * Signals whether or not MTOM has been turned on for the endpoint 
+     * based on the annotation configuration.
+     * 
+     * @return a boolean value 
+     */
+    public boolean isMTOMEnabled();
+    
+    /**
+     * If MTOM is enabled, returns the threshold value.
+     * 
+     * @return -1 if MTOM is not enabled, a positive integer value if 
+     * one was configured.
+     */
+    public int getMTOMThreshold();
+    
+    
     /**
      * Return the DescriptionBuilderComposite, if any, used to build this service description.
      * @return
      */
     public DescriptionBuilderComposite getDescriptionBuilderComposite();
-
 }

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java?rev=614296&r1=614295&r2=614296&view=diff
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java Tue Jan 22 11:36:04 2008
@@ -31,6 +31,7 @@
 
 import javax.wsdl.Definition;
 import javax.xml.namespace.QName;
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
 
 import java.io.InputStream;
 import java.lang.annotation.Annotation;
@@ -82,7 +83,9 @@
     private List<WebServiceRefAnnot> webServiceRefAnnotList;
     private BindingTypeAnnot bindingTypeAnnot;
     private WebServiceContextAnnot webServiceContextAnnot;
-
+    
+    private List<Annotation> features;
+    
     // Class information
     private String className;
     private String[] classModifiers; //public, abstract, final, strictfp...
@@ -91,7 +94,7 @@
     private boolean isInterface = false;
     private QName preferredPort;        // Port to use if no port QName given.  May be null
     private boolean isMTOMEnabled = false;
-
+    
     private List<MethodDescriptionComposite> methodDescriptions;
     private List<FieldDescriptionComposite> fieldDescriptions;
     
@@ -369,7 +372,15 @@
     public WebServiceContextAnnot getWebServiceContextAnnot() {
         return (WebServiceContextAnnot) webServiceContextAnnot;
     }
-
+    
+    public List<Annotation> getWebServiceFeatures() {
+        return features;
+    }
+    
+    public void setWebServiceFeatures(List<Annotation> list) {
+        features = list;
+    }
+    
     /** @return Returns the wsdlDefinition */
     public Definition getWsdlDefinition() {
         if (wsdlDefinition != null) {

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/ConverterUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/ConverterUtils.java?rev=614296&r1=614295&r2=614296&view=diff
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/ConverterUtils.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/ConverterUtils.java Tue Jan 22 11:36:04 2008
@@ -33,6 +33,8 @@
 import javax.jws.soap.SOAPBinding;
 import javax.xml.bind.annotation.XmlList;
 import javax.xml.ws.WebServiceRef;
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
+
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AnnotatedElement;
 import java.lang.reflect.GenericArrayType;
@@ -41,6 +43,7 @@
 import java.lang.reflect.Type;
 import java.lang.reflect.WildcardType;
 import java.security.PrivilegedAction;
+import java.util.ArrayList;
 import java.util.List;
 
 public class ConverterUtils {
@@ -60,6 +63,40 @@
             }
         });
      }
+    
+    /**
+     * Helper method to retrieve a list of all annotations that match the following
+     * conditions:
+     * 
+     * - Annotations that extend the parameterized type T
+     * - Annotations that themselves are annotated with type T
+     * 
+     * @param annotationClass
+     * @param element
+     * @return
+     */
+    public static <T extends Annotation> List<Annotation> getAnnotations(final Class<T> annotationClass, final AnnotatedElement element) {
+        List<Annotation> matches = new ArrayList<Annotation>();
+        Annotation[] annotations = null;
+        
+        // Get the complete list of annotations from the class that was provided.
+        annotations = (Annotation[]) AccessController.doPrivileged(new PrivilegedAction() {
+            public Object run() {
+                return element.getAnnotations();
+            }
+        });
+        
+        for (Annotation a: annotations) {        
+            // If the annotation matches the parameter type we're looking
+            // for, add it to the list.
+            if (a.annotationType().isAnnotationPresent(annotationClass) || 
+                annotationClass.isAssignableFrom(a.annotationType())) {
+                matches.add(a);
+            }
+        }
+        
+        return matches;
+    }
 
     /**
      * This is a helper method to create a <code>HandlerChainAnnot</code> since the

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaClassToDBCConverter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaClassToDBCConverter.java?rev=614296&r1=614295&r2=614296&view=diff
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaClassToDBCConverter.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaClassToDBCConverter.java Tue Jan 22 11:36:04 2008
@@ -18,12 +18,14 @@
  */
 package org.apache.axis2.jaxws.description.builder.converter;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.jws.WebService;
 import javax.xml.ws.BindingType;
@@ -33,6 +35,7 @@
 import javax.xml.ws.WebServiceProvider;
 import javax.xml.ws.WebServiceRef;
 import javax.xml.ws.WebServiceRefs;
+import javax.xml.ws.spi.WebServiceFeatureAnnotation;
 
 import org.apache.axis2.jaxws.description.builder.BindingTypeAnnot;
 import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
@@ -54,7 +57,15 @@
     private String seiClassName;
 
     private List<Class> classes;
-
+    
+    private static final Map<Class, Object> annotationProcessors;
+    
+    static {
+        annotationProcessors = new HashMap<Class, Object>();
+        
+        
+    }
+    
     public JavaClassToDBCConverter(Class serviceClass) {
         this.serviceClass = serviceClass;
         classes = new ArrayList<Class>();
@@ -185,6 +196,7 @@
         attachWebServiceProviderAnnotation(composite);
         attachWebServiceRefsAnnotation(composite);
         attachWebServiceRefAnnotation(composite);
+        attachWebServiceFeatureAnnotations(composite);
     }
 
     /**
@@ -347,6 +359,24 @@
     private void attachWebServiceRefAnnotation(DescriptionBuilderComposite composite) {
         ConverterUtils.attachWebServiceRefAnnotation(composite, serviceClass);
 
+    }
+    
+    /**
+     * Finds the list of WebServiceFeatureAnnotation instances, and set them on the composite.
+     * 
+     * @param composite
+     */
+    private void attachWebServiceFeatureAnnotations(DescriptionBuilderComposite composite) {
+        List<Annotation> features = ConverterUtils.getAnnotations(
+            WebServiceFeatureAnnotation.class, serviceClass); 
+        
+        if (features.size() > 0) {
+            if (log.isDebugEnabled()) {
+                log.debug("There were [" + features.size() + "] WebServiceFeature annotations found.");
+            }
+            
+            composite.setWebServiceFeatures(features);
+        }
     }
 
     private void establishClassHierarchy(Class rootClass) {

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java?rev=614296&r1=614295&r2=614296&view=diff
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java Tue Jan 22 11:36:04 2008
@@ -47,13 +47,16 @@
 import javax.xml.ws.WebServiceProvider;
 import javax.xml.ws.handler.PortInfo;
 import javax.xml.ws.soap.AddressingFeature;
+import javax.xml.ws.soap.MTOM;
 import javax.xml.ws.soap.MTOMFeature;
 import javax.xml.ws.soap.SOAPBinding;
 import javax.xml.ws.spi.WebServiceFeatureAnnotation;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants.Configuration;
 import org.apache.axis2.client.ServiceClient;
 import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.deployment.DeploymentException;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.OutInAxisOperation;
 import org.apache.axis2.description.OutOnlyAxisOperation;
@@ -97,11 +100,11 @@
  */
 class EndpointDescriptionImpl
         implements EndpointDescription, EndpointDescriptionJava, EndpointDescriptionWSDL {
-	private static final ServerConfigurator RESPECT_BINDING_CONFIGURATOR =
+    private static final ServerConfigurator RESPECT_BINDING_CONFIGURATOR =
         new RespectBindingConfigurator();
-	private static final ServerConfigurator ADDRESSING_CONFIGURATOR =
+    private static final ServerConfigurator ADDRESSING_CONFIGURATOR =
         new AddressingConfigurator();
-	private static final ServerConfigurator MTOM_CONFIGURATOR =
+    private static final ServerConfigurator MTOM_CONFIGURATOR =
         new MTOMConfigurator();
 
     private ServiceDescriptionImpl parentServiceDescription;
@@ -491,6 +494,9 @@
                 processor.processTypeLevelAnnotation(this, annotation);
             }
         }
+        
+        // Configure any available WebServiceFeatures on the endpoint.
+        configureWebServiceFeatures();
     }
 
     /**
@@ -589,14 +595,18 @@
 
             if (composite.isDeprecatedServiceProviderConstruction()
                     || !composite.isServiceProvider()) {
+//            if (!getServiceDescriptionImpl().isDBCMap()) {
                 Class seiClass = null;
                 if (DescriptionUtils.isEmpty(seiClassName)) {
-                    // This is the client code path; the @WebServce will not have an endpointInterface member
-                    // so just build the EndpointInterfaceDesc based on the class itself.
+                    // TODO: (JLB) This is the client code path; the @WebServce will not have an endpointInterface member
+                    // For now, just build the EndpointInterfaceDesc based on the class itself.
+                    // TODO: The EID ctor doesn't correctly handle anything but an SEI at this
+                    //       point; e.g. it doesn't publish the correct methods of just an impl.
                     seiClass = composite.getCorrespondingClass();
                 } else {
-                    // This is the deprecated server-side introspection code for an impl that references an SEI
+                    // TODO: (JLB) This is the deprecated server-side introspection code for an impl that references an SEI
                     try {
+                        // TODO: Using Class forName() is probably not the best long-term way to get the SEI class from the annotation
                         seiClass = ClassLoaderUtils.forName(seiClassName, false,
                                                             ClassLoaderUtils.getContextClassLoader(this.axisService != null ? this.axisService.getClassLoader() : null));
                         // Catch Throwable as ClassLoader can throw an NoClassDefFoundError that
@@ -609,14 +619,17 @@
                 }
                 endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl(seiClass, this);
             } else {
+                //TODO: Determine if we need logic here to determine implied SEI or not. This logic
+                //		may be handled by EndpointInterfaceDescription
+
                 if (DescriptionUtils.isEmpty(getAnnoWebServiceEndpointInterface())) {
 
-                    // Build the EndpointInterfaceDesc based on the class itself
+                    //TODO: Build the EndpointInterfaceDesc based on the class itself
                     endpointInterfaceDescription =
                             new EndpointInterfaceDescriptionImpl(composite, true, this);
 
                 } else {
-                    // Otherwise, build the EID based on the SEI composite
+                    //Otherwise, build the EID based on the SEI composite
                     endpointInterfaceDescription = new EndpointInterfaceDescriptionImpl(
                             getServiceDescriptionImpl().getDBCMap().get(seiClassName),
                             false,
@@ -1364,6 +1377,44 @@
         return handlerChainAnnotation;
     }
 
+    // ===========================================
+    // ANNOTATION: MTOM
+    // ===========================================
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.axis2.jaxws.description.EndpointDescription#isMTOMEnabled()
+     */
+    public boolean isMTOMEnabled() {
+        if (axisService != null) {
+            // We should cache this call here so we don't have to make
+            // it on every pass through.
+            Parameter enableMTOM = axisService.getParameter(Configuration.ENABLE_MTOM);
+            if (enableMTOM != null) {
+                return (Boolean) enableMTOM.getValue();
+            }
+        }
+        
+        return false;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.axis2.jaxws.description.EndpointDescription#getMTOMThreshold()
+     */
+    public int getMTOMThreshold() {
+        if (axisService != null) {
+            // We should cache this call here so we don't have to make
+            // it on every pass through.
+            Parameter mtomThreshold = axisService.getParameter(Configuration.MTOM_THRESHOLD);
+            if (mtomThreshold != null) {
+                return (Integer) mtomThreshold.getValue();
+            }
+        }
+        
+        return -1;
+    }
+    
     // Get the specified WebServiceFeatureAnnotation
     public Annotation getAnnoFeature(String id) {
         return framework.getAnnotation(id);
@@ -1383,17 +1434,26 @@
     		framework.addConfigurator(MTOMFeature.ID, MTOM_CONFIGURATOR);
     	}
     	
-    	//TODO: Need to add support for the DescriptionBuilderComposite?
-    	Annotation[] annotations = composite.getCorrespondingClass().getAnnotations();
-    	
-    	if (annotations != null) {
-    		for (Annotation annotation : annotations) {
-    			if (annotation.annotationType().isAnnotationPresent(WebServiceFeatureAnnotation.class))
-    				framework.addAnnotation(annotation);
-    		}
-        	
-        	framework.configure(this);
-    	}
+        // The feature instances are stored on the composite from either the 
+        // Java class or from something else building the list and setting it there.
+        List<Annotation> features = composite.getWebServiceFeatures();
+        
+        if (features != null && features.size() > 0) {
+            // Add each of the annotation instances to the WebServiceFeature framework
+            Iterator<Annotation> itr = features.iterator();
+            while (itr.hasNext()) {
+                Annotation feature = (Annotation) itr.next();
+                framework.addAnnotation(feature);
+            }
+            
+            // Kick off the configuration of the WebServiceFeature instances.
+            framework.configure(this);
+        }
+        else {
+            if (log.isDebugEnabled()) {
+                log.debug("No WebServiceFeatureAnnotation instances were found on the composite.");
+            }
+        }   
     }
     
     private Definition getWSDLDefinition() {
@@ -1819,6 +1879,20 @@
             return string.toString();
         }
         return string.toString();
+    }
+    
+    /**
+     * Get an annotation.  This is wrappered to avoid a Java2Security violation.
+     * @param cls Class that contains annotation 
+     * @param annotation Class of requrested Annotation
+     * @return annotation or null
+     */
+    private static Annotation getAnnotation(final Class cls, final Class annotation) {
+        return (Annotation) AccessController.doPrivileged(new PrivilegedAction() {
+            public Object run() {
+                return cls.getAnnotation(annotation);
+            }
+        });
     }
 }
 

Modified: webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/server/config/MTOMConfigurator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/server/config/MTOMConfigurator.java?rev=614296&r1=614295&r2=614296&view=diff
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/server/config/MTOMConfigurator.java (original)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/src/org/apache/axis2/jaxws/server/config/MTOMConfigurator.java Tue Jan 22 11:36:04 2008
@@ -21,20 +21,25 @@
 import javax.xml.ws.soap.MTOM;
 import javax.xml.ws.soap.MTOMFeature;
 
+import org.apache.axis2.Constants;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.jaxws.ExceptionFactory;
 import org.apache.axis2.jaxws.description.EndpointDescription;
 import org.apache.axis2.jaxws.description.EndpointDescriptionJava;
 import org.apache.axis2.jaxws.feature.ServerConfigurator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  *
  */
 public class MTOMConfigurator implements ServerConfigurator {
 
+    private static Log log = LogFactory.getLog(MTOMConfigurator.class);
+    
     /*
-     *  (non-Javadoc)
+     * (non-Javadoc)
      * @see org.apache.axis2.jaxws.feature.WebServiceFeatureConfigurator#configure(org.apache.axis2.jaxws.description.EndpointDescription)
      */
     public void configure(EndpointDescription endpointDescription) {
@@ -43,19 +48,32 @@
     	AxisService service = endpointDescription.getAxisService();
     	
     	//Disable MTOM
-    	Parameter enableMTOM = new Parameter("enableMTOM", Boolean.FALSE);
-
-//      TODO NLS enable.
+    	Parameter enableMTOM = new Parameter(Constants.Configuration.ENABLE_MTOM, Boolean.FALSE);
+    	Parameter threshold = new Parameter(Constants.Configuration.MTOM_THRESHOLD, 0);
+        
+    	//TODO NLS enable.
         if (mtomAnnoation == null)
             throw ExceptionFactory.makeWebServiceException("The MTOM annotation was unspecified.");
     	
         //Enable MTOM.
     	if (mtomAnnoation.enabled()) {
-        	enableMTOM.setValue(Boolean.TRUE);
+            if (log.isDebugEnabled()) {
+                log.debug("Enabling MTOM via annotation.");
+            }
+    	    enableMTOM.setValue(Boolean.TRUE);
     	}
+        
+        //Set the threshold value.
+        if (mtomAnnoation.threshold() > 0) {
+            if (log.isDebugEnabled()) {
+                log.debug("Setting MTOM threshold to [" + mtomAnnoation.threshold() + "].");
+            }
+            threshold.setValue(mtomAnnoation.threshold());
+        }
     	
     	try {
-    		service.addParameter(enableMTOM);
+    	    service.addParameter(enableMTOM);
+            service.addParameter(threshold);
     	}
     	catch (Exception e) {
             //TODO NLS enable.

Added: webservices/axis2/branches/java/jaxws21/modules/metadata/test/org/apache/axis2/jaxws/description/feature/MTOMFeatureTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/jaxws21/modules/metadata/test/org/apache/axis2/jaxws/description/feature/MTOMFeatureTests.java?rev=614296&view=auto
==============================================================================
--- webservices/axis2/branches/java/jaxws21/modules/metadata/test/org/apache/axis2/jaxws/description/feature/MTOMFeatureTests.java (added)
+++ webservices/axis2/branches/java/jaxws21/modules/metadata/test/org/apache/axis2/jaxws/description/feature/MTOMFeatureTests.java Tue Jan 22 11:36:04 2008
@@ -0,0 +1,132 @@
+/*
+ * 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.description.feature;
+
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.description.ServiceDescription;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.soap.MTOM;
+
+import junit.framework.TestCase;
+
+public class MTOMFeatureTests extends TestCase {
+    
+    private static final String ns = "http://jaxws.axis2.apache.org/metadata/feature/mtom";
+    
+    private static final String defaultServicePortName = "DefaultServicePort";
+    private static final String plainServicePortName = "PlainServicePort";
+    private static final String disabledServicePortName = "DisabledServicePort";
+    private static final String thresholdServicePortName = "ThresholdServicePort";
+    private static final String badThresholdServicePortName = "BadThresholdServicePort";
+    
+    public void testNoAnnotation() {
+        ServiceDescription sd = DescriptionFactory.createServiceDescription(DefaultService.class);
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, defaultServicePortName));
+        assertTrue("The EndpointDescription should not be null.", ed != null);
+        
+        boolean mtomEnabled = ed.isMTOMEnabled();
+        assertTrue("MTOM should not be enabled by default", mtomEnabled == false);
+    }
+    
+    public void testPlainAnnotation() {
+        ServiceDescription sd = DescriptionFactory.createServiceDescription(PlainService.class);
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, plainServicePortName));
+        assertTrue("The EndpointDescription should not be null.", ed != null);
+        
+        boolean mtomEnabled = ed.isMTOMEnabled();
+        assertTrue("@MTOM included, but was not enabled.", mtomEnabled == true);
+        
+        int threshold = ed.getMTOMThreshold();
+        assertTrue("MTOM threshold should be 0 or less.", threshold <= 0);
+    }
+    
+    public void testDisabled() {
+        ServiceDescription sd = DescriptionFactory.createServiceDescription(DisabledService.class);
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, disabledServicePortName));
+        assertTrue("The EndpointDescription should not be null.", ed != null);
+        
+        boolean mtomEnabled = ed.isMTOMEnabled();
+        assertTrue("@MTOM included, and should be disabled.", mtomEnabled == false);
+    }
+    
+    public void testThreshold() {
+        ServiceDescription sd = DescriptionFactory.createServiceDescription(ThresholdService.class);
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, thresholdServicePortName));
+        assertTrue("The EndpointDescription should not be null.", ed != null);
+        
+        int threshold = ed.getMTOMThreshold();
+        assertTrue("MTOM threshold should be 2000.", threshold == 20000);
+    }
+    
+    public void testBadThreshold() {
+        ServiceDescription sd = DescriptionFactory.createServiceDescription(BadThresholdService.class);
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(ns, badThresholdServicePortName));
+        assertTrue("The EndpointDescription should not be null.", ed != null);
+        
+        int threshold = ed.getMTOMThreshold();
+        assertTrue("MTOM threshold should be [0], but was [" + threshold + "].", threshold == 0);
+    }
+    
+    @WebService(targetNamespace=ns, portName=defaultServicePortName)
+    class DefaultService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+    
+    @WebService(targetNamespace=ns, portName=plainServicePortName)
+    @MTOM
+    class PlainService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+    
+    @WebService(targetNamespace=ns, portName=disabledServicePortName)
+    @MTOM(enabled=false)
+    class DisabledService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+    
+    @WebService(targetNamespace=ns, portName=thresholdServicePortName)
+    @MTOM(threshold=20000)
+    class ThresholdService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+    
+    @WebService(targetNamespace=ns, portName=badThresholdServicePortName)
+    @MTOM(threshold=-1000)
+    class BadThresholdService {
+        public double getQuote(String symbol) {
+            return 101.01;
+        }
+    }
+}



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