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 2011/01/07 16:23:25 UTC

svn commit: r1056346 - in /axis/axis2/java/core/trunk/modules/metadata: src/org/apache/axis2/jaxws/util/WSToolingUtils.java test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java

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));
     }
 }



Re: svn commit: r1056346 - in /axis/axis2/java/core/trunk/modules/metadata: src/org/apache/axis2/jaxws/util/WSToolingUtils.java test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java

Posted by Afkham Azeez <af...@gmail.com>.
Hi Jeff,
No ACK?

On Sat, Jan 8, 2011 at 2:44 PM, Afkham Azeez <af...@gmail.com> wrote:

>
>
> On Fri, Jan 7, 2011 at 8:53 PM, <ba...@apache.org> wrote:
>
>> 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));
>>     }
>>
>
> Why don't you replace all those lines of code with;
> String[] versions = new String[] {"2.7","2.10","2.6", ... };
> for(String wsGenVersion: versions){
>       assertTrue(WSToolingUtils.isValidVersion(wsGenVersion))
> }
>
> You can do the same for assertFalse checks. Makes the code much more
> readable & maintainable.
>
>
>>  }
>>
>>
>>
>
>
> --
> *Afkham Azeez*
> Senior Software Architect & Senior Manager; WSO2, Inc.; http://wso2.com,
> *
> *
> *Member; Apache Software Foundation; **http://www.apache.org/*<http://www.apache.org/>
> *
> email: **azeez@wso2.com* <az...@wso2.com>* cell: +94 77 3320919
> blog: **http://blog.afkham.org* <http://blog.afkham.org>*
> twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez>
> *
> linked-in: **http://lk.linkedin.com/in/afkhamazeez*
> *
> *
> *Lean . Enterprise . Middleware*
> *
> *
>
>


-- 
*Afkham Azeez*
Senior Software Architect & Senior Manager; WSO2, Inc.; http://wso2.com,
*
*
*Member; Apache Software Foundation;
**http://www.apache.org/*<http://www.apache.org/>
*
email: **azeez@wso2.com* <az...@wso2.com>* cell: +94 77 3320919
blog: **http://blog.afkham.org* <http://blog.afkham.org>*
twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez>
*
linked-in: **http://lk.linkedin.com/in/afkhamazeez*
*
*
*Lean . Enterprise . Middleware*
*
*

Re: svn commit: r1056346 - in /axis/axis2/java/core/trunk/modules/metadata: src/org/apache/axis2/jaxws/util/WSToolingUtils.java test/org/apache/axis2/jaxws/utils/WSToolingUtilsTests.java

Posted by Afkham Azeez <af...@gmail.com>.
On Fri, Jan 7, 2011 at 8:53 PM, <ba...@apache.org> wrote:

> 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));
>     }
>

Why don't you replace all those lines of code with;
String[] versions = new String[] {"2.7","2.10","2.6", ... };
for(String wsGenVersion: versions){
      assertTrue(WSToolingUtils.isValidVersion(wsGenVersion))
}

You can do the same for assertFalse checks. Makes the code much more
readable & maintainable.


>  }
>
>
>


-- 
*Afkham Azeez*
Senior Software Architect & Senior Manager; WSO2, Inc.; http://wso2.com,
*
*
*Member; Apache Software Foundation;
**http://www.apache.org/*<http://www.apache.org/>
*
email: **azeez@wso2.com* <az...@wso2.com>* cell: +94 77 3320919
blog: **http://blog.afkham.org* <http://blog.afkham.org>*
twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez>
*
linked-in: **http://lk.linkedin.com/in/afkhamazeez*
*
*
*Lean . Enterprise . Middleware*
*
*