Author: nthaker
Date: Tue Aug  3 15:00:28 2010
New Revision: 981908

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

JAX-WS 2.2 update, Changes to support Implicit SEI restriction on exposing 
Static and Final Method as webservices.

Added:
    
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImplTests.java
Modified:
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MethodDescriptionComposite.java
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaMethodsToMDCConverter.java
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
    
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java
    
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/builder/converter/ReflectiveConverterTests.java

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MethodDescriptionComposite.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MethodDescriptionComposite.java?rev=981908&r1=981907&r2=981908&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MethodDescriptionComposite.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MethodDescriptionComposite.java
 Tue Aug  3 15:00:28 2010
@@ -33,7 +33,9 @@ public class MethodDescriptionComposite 
     private String returnType;    //Methods return type
     private String[] exceptions;
     private String declaringClass; //the class/interface that actually 
declares this method
-
+    private boolean staticModifier= false;//true if method is static
+    private boolean finalModifier = false; //true if method is final
+    
     boolean oneWayAnnotated;
        // boolean that indicates if an @XmlList annotation was found on the 
method
        private boolean                                 isListType = false;
@@ -333,6 +335,22 @@ public class MethodDescriptionComposite 
         this.parentDBC = dbc;
     }
 
+    public boolean isStatic() {
+        return staticModifier;
+    }
+
+    public void setStaticModifier(boolean staticModifier) {
+        this.staticModifier = staticModifier;
+    }
+
+    public boolean isFinal() {
+        return finalModifier;
+    }
+
+    public void setFinalModifier(boolean finalModifier) {
+        this.finalModifier = finalModifier;
+    }
+
     public boolean compare(Object obj) {
         if (obj instanceof MethodDescriptionComposite) {
             MethodDescriptionComposite mdc = (MethodDescriptionComposite)obj;

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaMethodsToMDCConverter.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaMethodsToMDCConverter.java?rev=981908&r1=981907&r2=981908&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaMethodsToMDCConverter.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/converter/JavaMethodsToMDCConverter.java
 Tue Aug  3 15:00:28 2010
@@ -75,6 +75,8 @@ public class JavaMethodsToMDCConverter {
                 mdc.setMethodName(method.getName());
                 setReturnType(mdc, method);
                 setIsListType(mdc, method);
+                
mdc.setStaticModifier(Modifier.isStatic(method.getModifiers()));
+                mdc.setFinalModifier(Modifier.isFinal(method.getModifiers()));
                 mdc.setDeclaringClass(method.getDeclaringClass().getName());
                 attachHandlerChainAnnotation(mdc, method);
                 attachOnewayAnnotation(mdc, method);

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java?rev=981908&r1=981907&r2=981908&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointInterfaceDescriptionImpl.java
 Tue Aug  3 15:00:28 2010
@@ -102,9 +102,6 @@ public class EndpointInterfaceDescriptio
     public static final javax.jws.soap.SOAPBinding.ParameterStyle 
SOAPBinding_ParameterStyle_DEFAULT =
             javax.jws.soap.SOAPBinding.ParameterStyle.WRAPPED;
 
-    private static String newRulesFlag = null;
-    
-    private static String newSunRulesFlag = null;
     
     /**
      * Add the operationDescription to the list of operations.  Note that we 
can not create the
@@ -252,7 +249,7 @@ public class EndpointInterfaceDescriptio
                 
                 OperationDescription operation =
                     new OperationDescriptionImpl(mdc, this, axisOperation);
-                //In LegacyWebmethod case:
+
                 //1) if wsdl is defined then we should only expose operations 
that are in wsdl.
                 //NOTE:If wsdl is defined AxisService will have all operations 
found in wsdl, 
                 //AxisServiceBuilder will do that part before metadata layer 
is invoked.
@@ -811,30 +808,33 @@ public class EndpointInterfaceDescriptio
     private MethodRetriever getMethodRetriever () {
 
         MethodRetriever methodRetriever = null;
-        boolean newSunBehavior = false;
-
-        //If the user has a setting for the property flag then that overrides 
and possible setting
-        //of the SUN flag. Assuming no
-        //property, we will still honor the setting of the SUN property.
-        
-        //REVIEW: We are making the assumption that the system property always 
overrides the manifest
-        //        property. So, if both are set than the manifest property 
will be ignored
-        if (WSToolingUtils.hasValue(getNewRulesFlag())) {
-            if (newRulesFlag.equalsIgnoreCase("false")) {
-                if (log.isDebugEnabled()){
-                    log.debug("EndpointInterfaceDescriptionImpl: System or 
Manifest property USE_LEGACY_WEB_METHOD_RULES set to false" );
-                }
-                newSunBehavior = 
isNewSunBehavior(MDQConstants.USE_LEGACY_WEB_METHOD_RULES);
+        //default behavior
+        boolean newSunBehavior = true;
+        //Lets make sure the default behavior is supported by packaged JDK.
+        //this check verifies JAX-WS2.2 tooling is supported.
+        newSunBehavior = isNewSunBehaviorSupported();
+        
+        //The system property always overrides the manifest
+        //property. So, if both are set than the manifest property will be 
ignored
+        
+        String legacyWebmethod = readLegacyWebMethodFlag();
+        if (WSToolingUtils.hasValue(legacyWebmethod) && 
legacyWebmethod.equalsIgnoreCase("true")) {
+            if (log.isDebugEnabled()){
+                log.debug("EndpointInterfaceDescriptionImpl: System or 
Manifest property USE_LEGACY_WEB_METHOD_RULES set to true" );
             }
-        } else if (WSToolingUtils.hasValue(getNewSunRulesFlag())) {
-            if (getNewSunRulesFlag().equalsIgnoreCase("false")) {
+            //LegacyWebmethod property set to true, use old JAX-WS tooling 
behavior.  
+            newSunBehavior = false;
+        }else {
+            //If LegacyWebmehtod was not set check for sun property.
+            String newSunRulesFlag = getNewSunRulesFlag();
+            if (WSToolingUtils.hasValue(newSunRulesFlag) && 
newSunRulesFlag.equalsIgnoreCase("true")) {
                 if (log.isDebugEnabled()){
-                    log.debug("EndpointInterfaceDescriptionImpl: System 
property USE_LEGACY_WEB_METHOD_RULES_SUN set to false" );
+                    log.debug("EndpointInterfaceDescriptionImpl: System 
property USE_LEGACY_WEB_METHOD_RULES_SUN set to true" );
                 }
-                newSunBehavior = 
isNewSunBehavior(MDQConstants.USE_LEGACY_WEB_METHOD_RULES_SUN);
+                newSunBehavior = false;;
             }
         }
-        
+        //Now based on the outcome of LegacyWebmethod and sun property check, 
retrieve methods to expose.
         methodRetriever = newSunBehavior ? new 
PostRI216MethodRetrieverImpl(dbc, this) : new LegacyMethodRetrieverImpl(dbc, 
this);
         
         if(log.isDebugEnabled()) {
@@ -899,15 +899,61 @@ public class EndpointInterfaceDescriptio
         
         return versionValid;
     }
-    
-    private String getNewRulesFlag () {
+    /**
+     * The user has indicated that they want to use the new Sun behavior 
(regardless) of which flag 
+     * they were using.
+     * This method determines whether we have the proper JDK version for using 
the new SUN behavior for
+     * retrieving methods. We determine this by checking the version of WsGen.
+     * @param propertyToSet
+     * @return
+     */
+    private boolean isNewSunBehaviorSupported() {
+
+        if (log.isDebugEnabled()) {
+            log.debug("isNewSunBehavior: Validating that JDK version can be 
used");
+
+        }
         
-        if (newRulesFlag != null) {
-            return newRulesFlag;
+        boolean versionValid = false;
+
+        try {
+            
+            String wsGenVersion = WSToolingUtils.getWsGenVersion();
+            
+            versionValid = WSToolingUtils.isValidVersion(wsGenVersion);
+            
+            if (log.isDebugEnabled()) {
+                log.debug("isNewSunBehavior: versionValid is: " +versionValid);
+            }
+            
+            if (!versionValid) {
+
+                if (log.isDebugEnabled()) {
+                    log.debug("New Sun tooling behavior is not supported with 
this version of the JDK");
+                }
+            }
+
+            // We don't want to affect existing systems, if anything goes
+            // wrong just display
+            // a warning and default to old behavior
+        } catch (ClassNotFoundException e) {
+            if (log.isDebugEnabled()) {
+                log.debug(" Unable to determine WsGen version being used");
+            }
+        } catch (IOException ioex) {
+            if (log.isDebugEnabled()) {
+                log.debug(" Unable to determine WsGen version being used");
+            }
         }
+        
+        return versionValid;
+    }
+    private String readLegacyWebMethodFlag () {
+        
+       String legacyWebmethod= null;
             
         try {
-            newRulesFlag = (String) AccessController.doPrivileged(
+            legacyWebmethod = (String) AccessController.doPrivileged(
                 new PrivilegedExceptionAction() {
                     public Object run() {
                         //System property takes precedence over manifest 
property.
@@ -922,7 +968,7 @@ public class EndpointInterfaceDescriptio
             }
         }
         //System property not set, so let return the manifest property.
-        if(!WSToolingUtils.hasValue(newRulesFlag)){
+        if(!WSToolingUtils.hasValue(legacyWebmethod)){
             if (log.isDebugEnabled()){
                 log.debug("EndpointInterfaceDescriptionImpl: system property 
'"+MDQConstants.USE_LEGACY_WEB_METHOD_RULES + "' not set" );
             }
@@ -938,9 +984,9 @@ public class EndpointInterfaceDescriptio
                     }
                 }else{
                     if (log.isDebugEnabled()){
-                        log.debug("EndpointInterfaceDescriptionImpl: Manifest 
property '"+ MDQConstants.USE_MANIFEST_LEGACY_WEB_METHOD_RULES+ "' is set" );
+                        log.debug("EndpointInterfaceDescriptionImpl: Manifest 
property '"+ MDQConstants.USE_MANIFEST_LEGACY_WEB_METHOD_RULES+ "' is set 
to"+param );
                     }
-                    newRulesFlag = param;
+                    legacyWebmethod = param;
                 }
             }else{
                 if (log.isDebugEnabled()){
@@ -953,14 +999,12 @@ public class EndpointInterfaceDescriptio
                 log.debug("EndpointInterfaceDescriptionImpl: system property 
'"+MDQConstants.USE_LEGACY_WEB_METHOD_RULES + "' set" );
             }
         }
-        return newRulesFlag;
+        return legacyWebmethod;
     }
     
     private static String getNewSunRulesFlag () {
         
-        if (newSunRulesFlag != null) {
-            return newSunRulesFlag;
-        }
+        String newSunRulesFlag = null;
             
         try {
             newSunRulesFlag = (String) AccessController.doPrivileged(
@@ -975,7 +1019,16 @@ public class EndpointInterfaceDescriptio
                 log.debug("Exception getting USE_LEGACY_WEB_METHOD_RULES_SUN 
system property: " +e.getException());
             }
         }
-        
+        if(WSToolingUtils.hasValue(newSunRulesFlag)){
+            if (log.isDebugEnabled()){
+                log.debug("EndpointInterfaceDescriptionImpl: system property 
'"+MDQConstants.USE_LEGACY_WEB_METHOD_RULES_SUN + "' is set" );
+                log.debug("MDQConstants.USE_LEGACY_WEB_METHOD_RULES_SUN 
="+newSunRulesFlag);
+            }            
+        }else{
+            if (log.isDebugEnabled()){
+                log.debug("EndpointInterfaceDescriptionImpl: system property 
'"+MDQConstants.USE_LEGACY_WEB_METHOD_RULES_SUN + "' is not set" );
+            }
+        }
         return newSunRulesFlag;
     }
     

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java?rev=981908&r1=981907&r2=981908&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImpl.java
 Tue Aug  3 15:00:28 2010
@@ -155,8 +155,15 @@ public class PostRI216MethodRetrieverImp
             iter = dbc.getMethodDescriptionsList().iterator();
             while (iter.hasNext()) {
                 MethodDescriptionComposite mdc = iter.next();
-
-                if (!DescriptionUtils.isExcludeTrue(mdc)) {
+                //flag to check if the method can be exposed as webservice.
+                boolean isWebservice = !DescriptionUtils.isExcludeTrue(mdc) && 
!mdc.isStatic() && !mdc.isFinal();
+                if(!isWebservice){
+                    if(log.isDebugEnabled()){
+                        log.debug(mdc.getMethodName() + " has static or final 
modifiers in method signature or has @Webmethod(exclude=true) set");
+                        log.debug(mdc.getMethodName() + " cannot be exposed as 
a webservice");
+                    }
+                }
+                if (isWebservice) {
                     mdc.setDeclaringClass(dbc.getClassName());
                     retrieveList.add(mdc);
                 }

Modified: 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java?rev=981908&r1=981907&r2=981908&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/AnnotationServiceImplDescriptionTests.java
 Tue Aug  3 15:00:28 2010
@@ -507,7 +507,12 @@ public class AnnotationServiceImplDescri
         // Test results from method with no annotation
         OperationDescription[] operationDescs =
                 testEndpointInterfaceDesc.getOperationForJavaMethod("method1");
-        assertNull(operationDescs);
+        
+        if(isLegacyBehavior()){
+            assertNull(operationDescs);
+        }else{
+            assertNotNull(operationDescs);
+        }
 
         OperationDescription operationDesc =
                 
testEndpointInterfaceDesc.getOperationForJavaMethod("method2")[0];
@@ -556,15 +561,8 @@ public class AnnotationServiceImplDescri
     }
     
     public void testWebMethodOldBehavior3() {
-        try {
-            
-            if 
(WSToolingUtils.isValidVersion(WSToolingUtils.getWsGenVersion())) {
-                System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, 
"true");
-                //Try new behavior
-            }            
-        } catch (ClassNotFoundException e) {
-        } catch (IOException ioex) {
-        }
+
+        System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, "true");
         EndpointInterfaceDescriptionImpl testEndpointInterfaceDesc =
             
(EndpointInterfaceDescriptionImpl)getEndpointInterfaceDesc(WebMethodLegacyCheck.class);
         
@@ -579,20 +577,22 @@ public class AnnotationServiceImplDescri
         }
 
     }
-    //This test verifies that the old WebMethod behavior has not changed if 
the system flag is
-    //not set, slightly redundant but still a safety check
-    public void testWebMethodOldBehavior1() {
+    //This test verifies default webMethod behavior
+    public void testWebMethodDefaultBehavior() {
         
         try {
             //If the version is valid then try the new behavior
-            if 
(WSToolingUtils.isValidVersion(WSToolingUtils.getWsGenVersion())) {
-                System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, 
"false");
-                //Try new behavior
-            }            
+            if 
(!WSToolingUtils.isValidVersion(WSToolingUtils.getWsGenVersion())) {
+                //No point in testing this case if new behavior is not 
supported.
+                //default is the new tooling behavior.
+                return;
+                
+            }
         } catch (ClassNotFoundException e) {
         } catch (IOException ioex) {
         }
-        
+      //default behavior
+        System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, "");
         
         EndpointInterfaceDescription testEndpointInterfaceDesc =
                 getEndpointInterfaceDesc(WebMethodTestImpl.class);
@@ -602,7 +602,7 @@ public class AnnotationServiceImplDescri
         OperationDescription[] operationDescs =
                 testEndpointInterfaceDesc.getOperationForJavaMethod("method1");
 
-        assertNull(operationDescs);
+        assertNotNull(operationDescs);
 
         OperationDescription operationDesc =
                 
testEndpointInterfaceDesc.getOperationForJavaMethod("method2")[0];
@@ -634,27 +634,13 @@ public class AnnotationServiceImplDescri
 
     }
 
-    //This test verifies that, if we do have the appropriate JDK installed but 
we do not set
-    //the System property then the old behavior remains unchanged
-    public void testWebMethodOldBehavior2() {
-        
-        try {
-            //If the version is valid then try the new behavior
-            if 
(WSToolingUtils.isValidVersion(WSToolingUtils.getWsGenVersion())) {
-                //Set the property to empty just to make sure we are not 
trying the new behavior
-                //In order for the new behavior to work, this must be set 
explicitly to 'false'
-                System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, 
"");
-                //Try new behavior
-            } else {
-                //At this point, just return as it would be redundant to 
continue...already tested
-                // in testWebMethodOldBehavior1
-                return;
-            }
-        } catch (ClassNotFoundException e) {
-        } catch (IOException ioex) {
-        }
+    //This test verifies old webmethod behavior
+    public void testWebMethodOldBehavior() {
         
+        //Weather new tooling is supported or not, Legacy behavior should
+        //always work if LegacyWebMethod property is set.
         
+        System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, "true");
         EndpointInterfaceDescription testEndpointInterfaceDesc =
                 getEndpointInterfaceDesc(WebMethodTestImpl.class);
         
@@ -662,7 +648,7 @@ public class AnnotationServiceImplDescri
         // Test results from method with no annotation
         OperationDescription[] operationDescs =
                 testEndpointInterfaceDesc.getOperationForJavaMethod("method1");
-
+        //check legacy behavior
         assertNull(operationDescs);
 
         OperationDescription operationDesc =
@@ -702,7 +688,7 @@ public class AnnotationServiceImplDescri
     //    and
     // in this method, by forcing "validVersion" to true. Realize that by 
doing this other tests
     // will fail...So this should be considered temporary for testing this 
method
-    public void testWebMethodNewBehavior1() {
+    public void testWebMethodNewBehavior() {
         
         try {
             boolean validVersion = 
WSToolingUtils.isValidVersion(WSToolingUtils.getWsGenVersion());
@@ -713,13 +699,13 @@ public class AnnotationServiceImplDescri
                 System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, 
"false");
             } else {
                 //At this point, just return since the test would be 
guaranteed to fail as we
-                //testing new rules
+                //testing new tooling rules and it seems new tooling is not 
supported here.     
                 return;
             }
         } catch (ClassNotFoundException e) {    
         } catch (IOException ioex) {
         }
-        
+        System.setProperty(MDQConstants.USE_LEGACY_WEB_METHOD_RULES, "true");
         EndpointInterfaceDescription testEndpointInterfaceDesc =
                 getEndpointInterfaceDesc(WebMethodTestImpl1.class);
         
@@ -756,7 +742,11 @@ public class AnnotationServiceImplDescri
 
         OperationDescription[] operationDescs =
                 testEndpointInterfaceDesc.getOperationForJavaMethod("method0");
-        assertNull(operationDescs);
+        if(isLegacyBehavior()){
+            assertNull(operationDescs);
+        }else{
+            assertNotNull(operationDescs);
+        }
 
         OperationDescription operationDesc =
                 
testEndpointInterfaceDesc.getOperationForJavaMethod("method1")[0];
@@ -835,7 +825,11 @@ public class AnnotationServiceImplDescri
         // DOCUMENT / LITERAL / BARE methods
 
         operationDescs = 
testEndpointInterfaceDesc.getOperationForJavaMethod("method0_bare");
-        assertNull(operationDescs);
+        if(isLegacyBehavior()){
+            assertNull(operationDescs);
+        }else{
+            assertNotNull(operationDescs);
+        }
 
         operationDesc = 
testEndpointInterfaceDesc.getOperationForJavaMethod("method1_bare")[0];
         assertNotNull(operationDesc);
@@ -915,6 +909,7 @@ public class AnnotationServiceImplDescri
     }
 
     public void testWebParamWrapped() {
+        
         EndpointInterfaceDescription testEndpointInterfaceDesc =
                 getEndpointInterfaceDesc(WebParamTestImpl.class);
 
@@ -923,11 +918,20 @@ public class AnnotationServiceImplDescri
         // method0
         OperationDescription[] operationDescs =
                 testEndpointInterfaceDesc.getOperationForJavaMethod("method0");
-        assertNull(operationDescs);
+        if(isLegacyBehavior()){
+            assertNull(operationDescs);
+        }else{
+            assertNotNull(operationDescs);
+        }
 
         // method00
         operationDescs = 
testEndpointInterfaceDesc.getOperationForJavaMethod("method00");
-        assertNull(operationDescs);
+        if(isLegacyBehavior()){
+            assertNull(operationDescs);
+        }else{
+            assertNotNull(operationDescs);
+        }
+
 
         // method1
         OperationDescription operationDesc =
@@ -1228,12 +1232,19 @@ public class AnnotationServiceImplDescri
         // DOCUMENT / LITERAL / BARE methods
         OperationDescription[] operationDescs =
                 
testEndpointInterfaceDesc.getOperationForJavaMethod("method0_bare");
-        assertNull(operationDescs);
+        if(isLegacyBehavior()){
+            assertNull(operationDescs);
+        }else{
+            assertNotNull(operationDescs);
+        }
 
         // method00
         operationDescs = 
testEndpointInterfaceDesc.getOperationForJavaMethod("method00_bare");
-        assertNull(operationDescs);
-
+        if(isLegacyBehavior()){
+            assertNull(operationDescs);
+        }else{
+            assertNotNull(operationDescs);
+        }
         // method1
         OperationDescription operationDesc =
                 
testEndpointInterfaceDesc.getOperationForJavaMethod("method1_bare")[0];
@@ -1374,6 +1385,20 @@ public class AnnotationServiceImplDescri
        
        assertEquals("jaxws22MessageName", faultDescription.getMessageName());
     }
+    
+    private boolean isLegacyBehavior(){
+    
+        boolean legacyBehavior=false;
+        try {
+            //If the version is valid then try the new behavior
+            if 
(!WSToolingUtils.isValidVersion(WSToolingUtils.getWsGenVersion())) {
+                legacyBehavior=true;
+            }
+        } catch (ClassNotFoundException e) {
+        } catch (IOException ioex) {
+        }
+        return legacyBehavior;
+    }
 
     /*
     * Method to return the endpoint interface description for a given 
implementation class.

Modified: 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/builder/converter/ReflectiveConverterTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/builder/converter/ReflectiveConverterTests.java?rev=981908&r1=981907&r2=981908&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/builder/converter/ReflectiveConverterTests.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/builder/converter/ReflectiveConverterTests.java
 Tue Aug  3 15:00:28 2010
@@ -70,7 +70,7 @@ public class ReflectiveConverterTests ex
         List<MethodDescriptionComposite> mdcList = 
sortList(implDBC.getMethodDescriptionsList());
         sortList(mdcList);
         assertNotNull(mdcList);
-        assertEquals(mdcList.size(), 3);
+        assertEquals(mdcList.size(), 5);
         MethodDescriptionComposite mdc = mdcList.get(0);
         assertNotNull(mdc);
         assertEquals("<init>", mdc.getMethodName());
@@ -82,13 +82,20 @@ public class ReflectiveConverterTests ex
         assertNotNull(mdc);
         assertEquals("invoke2", mdc.getMethodName());
         assertEquals("int", mdc.getReturnType());
+        mdc = mdcList.get(3);
+        assertNotNull(mdc);
+        assertTrue("invoke3 is static operation and should return true for 
static check", mdc.isStatic());
+        mdc = mdcList.get(4);
+        assertNotNull(mdc);
+        assertTrue("invoke4 is final operation and should return true for 
static check", mdc.isFinal());
+        
     }
 
     public static void testImplParams() {
         assertNotNull(implDBC);
         List<MethodDescriptionComposite> mdcList = 
sortList(implDBC.getMethodDescriptionsList());
         assertNotNull(mdcList);
-        assertEquals(mdcList.size(), 3);
+        assertEquals(mdcList.size(), 5);
         MethodDescriptionComposite mdc = mdcList.get(0);
         assertNotNull(mdc);
         List<ParameterDescriptionComposite> pdcList = 
mdc.getParameterDescriptionCompositeList();
@@ -240,6 +247,14 @@ class SimpleServiceImpl {
     public int invoke2(int num1, int num2) {
         return num1 + num2;
     }
+    
+    public static String invoke3(){
+        return "static";
+    }
+    
+    public final String invoke4(){
+        return "final";
+    }
 }
 
 @WebService(name = "SimpleServicePort")

Added: 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImplTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImplTests.java?rev=981908&view=auto
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImplTests.java
 (added)
+++ 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/impl/PostRI216MethodRetrieverImplTests.java
 Tue Aug  3 15:00:28 2010
@@ -0,0 +1,72 @@
+package org.apache.axis2.jaxws.description.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.description.ServiceDescription;
+import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
+import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite;
+import 
org.apache.axis2.jaxws.description.builder.converter.JavaClassToDBCConverter;
+
+import junit.framework.TestCase;
+
+public class PostRI216MethodRetrieverImplTests extends TestCase {
+    
+    public void testMethodRetriever(){
+        //Create DBC for implicit SEI
+        JavaClassToDBCConverter converter = new 
JavaClassToDBCConverter(EchoMessageService.class);
+        HashMap<String, DescriptionBuilderComposite> dbcMap = 
converter.produceDBC();
+        assertNotNull(dbcMap);
+        DescriptionBuilderComposite dbc = 
dbcMap.get(EchoMessageService.class.getName());
+        //create EndpointDescription
+        List<ServiceDescription> serviceDescList =
+            DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap);
+        ServiceDescription sd = serviceDescList.get(0);
+        EndpointInterfaceDescriptionImpl eid = new 
EndpointInterfaceDescriptionImpl(dbc, new EndpointDescriptionImpl(null, new 
QName("http://nonanonymous.complextype.test.org","EchoMessagePort";), 
(ServiceDescriptionImpl)sd));
+        //Lets make sure correct MDC's where created.
+        List<MethodDescriptionComposite> mdcList = 
dbc.getMethodDescriptionsList();
+        assertTrue("Expecting 3 methods in MDC found"+mdcList.size(), 
mdcList.size()==4);
+        
+        //Lets make sure static and final modifiers are set on MDC as expected.
+        for(MethodDescriptionComposite mdc:mdcList){
+            if(mdc.getMethodName().contains("staticMethod")){
+                assertTrue(mdc.isStatic());
+            }
+            if(mdc.getMethodName().contains("finalMethod")){
+                assertTrue(mdc.isFinal());
+            }
+        }
+        
+        //Let make sure static and final methods are not exposed as webservice.
+        PostRI216MethodRetrieverImpl mr = new 
PostRI216MethodRetrieverImpl(dbc, eid);
+        Iterator<MethodDescriptionComposite> iter =mr.retrieveMethods();
+        List<MethodDescriptionComposite> list = new 
ArrayList<MethodDescriptionComposite>();
+        while(iter.hasNext()){
+            list.add(iter.next());
+        }
+        assertEquals(list.size(), 2);
+        MethodDescriptionComposite mdc = list.get(0);
+        assertEquals("echoMessage", mdc.getMethodName());
+        mdc = list.get(1);
+        assertEquals("<init>", mdc.getMethodName());
+    }
+
+    @WebService(serviceName = "EchoMessageService", portName = 
"EchoMessagePort", targetNamespace = 
"http://nonanonymous.complextype.test.org";, wsdlLocation = "")
+    public static class EchoMessageService {
+        public String echoMessage(String arg) {
+            return arg;
+        }
+        public static String staticMethod(String arg){
+            return arg;
+        }
+        public final String finalMethod(String arg){
+            return arg;
+        }
+    }
+}


Reply via email to