Hi Jeff, No ACK? On Sat, Jan 8, 2011 at 2:44 PM, Afkham Azeez <[email protected]> wrote:
> > > On Fri, Jan 7, 2011 at 8:53 PM, <[email protected]> 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: **[email protected]* <[email protected]>* 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: **[email protected]* <[email protected]>* 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* * *
