Author: barrettj
Date: Fri Jan  7 15:23:24 2011
New Revision: 1056346

URL: http://svn.apache.org/viewvc?rev=1056346&view=rev
Log:
Fix the WsGen version number checking, which is used to determine the WebMethod 
annotation processing rules.  Update associated test.

Modified:
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/util/WSToolingUtils.java
    
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/util/WSToolingUtils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/util/WSToolingUtils.java?rev=1056346&r1=1056345&r2=1056346&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/util/WSToolingUtils.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/util/WSToolingUtils.java
 Fri Jan  7 15:23:24 2011
@@ -141,6 +141,13 @@ public class WSToolingUtils {
         return cl;
     }
 
+    /**
+     * Answer if the input version number is 2.1.6 or later.  Version 2.1.6 is 
the Sun RI version that changed
+     * the WebMethod annotation semantics.
+     * 
+     * @param wsGenVersion A version number separated by "."  Up to the first 
3 values will be checked.
+     * @return true if the version number is 2.1.6 or later, false otherwise.
+     */
     public static boolean isValidVersion(String wsGenVersion) {
         if(log.isDebugEnabled()){
             log.debug("Start isValidVersion(String)");
@@ -162,66 +169,98 @@ public class WSToolingUtils {
          * we return false if version is less that 2.1.6.
          * possible input version strings could be "JAX-WS RI 2.2-b05-", 
"2.1.6" "2.1.0" etc.
          */
-        // Beginning of reuseable code
-        final int VERSION_FIELD_1 = 2;
-        final int VERSION_FIELD_2 = 1;
-        final int VERSION_FIELD_3 = 6;
+        
+        // Minimum version required is 2.1.6
+        final int minimumVersionRequired[] = {2, 1, 6};
 
         String version = wsGenVersion.trim();
         
         StringTokenizer st = new StringTokenizer(version, ".");
-        if(st.countTokens()<=0){
+        if(st.countTokens() <= 0){
             if(log.isDebugEnabled()){
                 log.debug("No Tokens to validate the tooling version, Input 
version String is invalid.");
             }
             return false;
         }
-        for(int tokenCnt = 1;st.hasMoreTokens();tokenCnt++){
+        
+        // Check up to as many version values as we have values in the minimum 
required version
+        boolean lastCheckEqual = false;
+        int tokenCnt = 0;
+
+        for( ; tokenCnt < minimumVersionRequired.length && st.hasMoreTokens(); 
tokenCnt++) {
             String token = st.nextToken();
             if(token == null){
                 return false;
             }
-            int versionNumber = getDigit(token);
-            if (tokenCnt==1 && versionNumber < VERSION_FIELD_1) {
+            int versionNumber = getIntegerValue(token);
+            int minimumVersionNumber = minimumVersionRequired[tokenCnt];
+            
+            if (versionNumber < minimumVersionNumber) {
+                // The version number is too low, so it is invalid
                 if(log.isDebugEnabled()){
-                    log.debug("Validation failed of tokenCnt="+tokenCnt);
-                    log.debug("Input VersionNumber ="+versionNumber);
+                    log.debug("Validation failed on tokenCnt = " + tokenCnt);
+                    log.debug("Input VersionNumber =" + versionNumber);
+                    log.debug("Minimum Version Number required = " + 
minimumVersionNumber);
                 }
                 return false;
-            } 
-            if(tokenCnt == 2 && versionNumber < VERSION_FIELD_2 ){  
+            } else if (versionNumber > minimumVersionNumber) {
+                // The version number is higher than required, so it passes 
validation.
                 if(log.isDebugEnabled()){
-                    log.debug("Validation failed of tokenCnt="+tokenCnt);
-                    log.debug("Input VersionNumber ="+versionNumber);
+                    log.debug("Validation passed on tokenCnt = " + tokenCnt);
+                    log.debug("Input VersionNumber = " + versionNumber);
+                    log.debug("Minimum Version Number required = " + 
minimumVersionNumber);
                 }
-                return false;
-            } 
-            if (tokenCnt==3 && versionNumber < VERSION_FIELD_3) {
+                return true;
+            } else {
+                // The version number sub-value matches exactly, so we need to 
check the next sub-value.s
                 if(log.isDebugEnabled()){
-                    log.debug("Validation failed of tokenCnt="+tokenCnt);
-                    log.debug("Input VersionNumber ="+versionNumber);
+                    log.debug("Validation unresolved on tokenCnt = " + 
tokenCnt);
+                    log.debug("Input VersionNumber = " + versionNumber);
+                    log.debug("Minimum Version Number required = " + 
minimumVersionNumber);
                 }
-                return false;
-            } 
+                lastCheckEqual = true;
+                continue;
+            }
         }
         if(log.isDebugEnabled()){
             log.debug("Exit isValidVersion(String)");
         }
-
+        // If the version numbers we checked so far were equal to the minimum 
version BUT it was shorter
+        // in length, then return false.  For example if the input is "2.1", 
that is actually "2.1.0"
+        // which would be less than "2.1.6".
+        if (lastCheckEqual && tokenCnt < minimumVersionRequired.length) {
+            return false;
+        } 
         return true;
     }
+    
     /**
-     * look for first digit in the version token.
-     * @param s - version token.
-     * @return a digit or -1 if not digit found in the token.
+     * Parse the input string and return an integer value based on it.  It 
will look for the first numeric value
+     * in the string then use all digits up to the next non-numeric value or 
end of the string as the basis for
+     * the value.  For example "JAX-WS RI 27" will return the value 27.
+     * @param s - String containing the integer to be returned.
+     * @return a value or -1 if not integer value was found in the token.
      */
-    private static int getDigit(String s){
-        for(int i=0;i<s.length();i++){
+    private static int getIntegerValue(String s){
+        int returnValue = -1;
+
+        // Build up a buffer containing any digits up to the first non-numeric 
character.
+        StringBuffer valueString = new StringBuffer();
+        for(int i = 0; i < s.length(); i++){
             char ch = s.charAt(i);
             if(Character.isDigit(ch)){
-                return Character.getNumericValue(ch);
+                valueString.append(Character.getNumericValue(ch));
+            } else if (valueString.length() > 0){
+                // We've found some numbers then encountered the first 
non-numeric value, so
+                // exit the loop and use those numbers as the value
+                break;
             }
         }
-        return -1;
+        
+        // If there were any numeric values found in the string, convert them 
to the integer return value
+        if (valueString.length() > 0) {
+            returnValue = Integer.valueOf(valueString.toString());
+        }
+        return returnValue;
     }
 }

Modified: 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java?rev=1056346&r1=1056345&r2=1056346&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java
 Fri Jan  7 15:23:24 2011
@@ -24,16 +24,51 @@ import junit.framework.TestCase;
 
 
 public class WSToolingUtilsTests extends TestCase {
+    /**
+     * Any string containing a version of 2.1.6 or later should return true.
+     */
     public void testisValidVersion(){
+        
+        // Should pass version check
         String wsGenVersion = "JAX-WS RI 2.2-b05-";
         assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
         wsGenVersion = "2.1.6";
         assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.1.6.4";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        
+        // Shouldn't pass version check
         wsGenVersion = "2.1.0";
         assertFalse(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.1";
+        assertFalse(WSToolingUtils.isValidVersion(wsGenVersion));
         wsGenVersion = "2.0.6";
         assertFalse(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.0";
+        assertFalse(WSToolingUtils.isValidVersion(wsGenVersion));
         wsGenVersion = "1.1.6";
         assertFalse(WSToolingUtils.isValidVersion(wsGenVersion));        
+        wsGenVersion = "2.0-11";
+        assertFalse(WSToolingUtils.isValidVersion(wsGenVersion));
+
+        // Should pass version check
+        wsGenVersion = "2.7";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.10";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.1.60";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.2.1";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "3";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "3.2";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.2.1.7";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "2.2-11";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
+        wsGenVersion = "10.2";
+        assertTrue(WSToolingUtils.isValidVersion(wsGenVersion));
     }
 }


Reply via email to