[ 
https://issues.apache.org/jira/browse/AXIOM-438?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Masaki Nishikawa closed AXIOM-438.
----------------------------------

    
> StringIndexOutOfBoundsException occur on rare occasions is when you create a 
> stub object
> ----------------------------------------------------------------------------------------
>
>                 Key: AXIOM-438
>                 URL: https://issues.apache.org/jira/browse/AXIOM-438
>             Project: Axiom
>          Issue Type: Bug
>          Components: API
>    Affects Versions: 1.2.10
>         Environment: Linux
>            Reporter: Masaki Nishikawa
>            Priority: Trivial
>
> (Google Translated)
> There is a problem with the logic of UUIDGenerator.getInitialUUID, is rare, 
> can occur when generating the object of the stub is 
> StringIndexOutOfBoundsException.
> The cause is because the next "1" s number, places such as "01" when over a 
> string of numeric Integer.toHexString will decrease.
> What are you handling this like why, I do not understand, what the problem be 
> solved by simply zero-fill?
> We appreciate if you fix this bug.
> 【The appropriate program】
> public class UUIDGenerator {
>       /* Omitted */
>     protected static String getInitialUUID() {
>         if (myRand == null) {
>             myRand = new Random();
>         }
>         long rand = myRand.nextLong();
>         String sid;
>         try {
>             sid = InetAddress.getLocalHost().toString();
>         } catch (UnknownHostException e) {
>             sid = Thread.currentThread().getName();
>         }
>         StringBuffer sb = new StringBuffer();
>         sb.append(sid);
>         sb.append(":");
>         sb.append(Long.toString(rand));
>         MessageDigest md5 = null;
>         try {
>             md5 = MessageDigest.getInstance("MD5");
>         } catch (NoSuchAlgorithmException e) {
>             throw new OMException(e);
>         }
>         md5.update(sb.toString().getBytes());
>         byte[] array = md5.digest();
>         StringBuffer sb2 = new StringBuffer();
>         for (int j = 0; j < array.length; ++j) {
>             int b = array[j] & 0xFF;
>             sb2.append(Integer.toHexString(b)); // The problem here! Is a 
> string of "1" the number "01" is Integer.toHexString, reduce the number of 
> digits is
>         }
>         int begin = myRand.nextInt();
>         if (begin < 0) begin = begin * -1;
>         begin = begin % 8;
>         return sb2.toString().substring(begin, begin + 18).toUpperCase(); // 
> Is raised here StringIndexOutofBoundsException
>     }
>     /* Omitted */
> }
> 【Error Trace】
> java.lang.StringIndexOutOfBoundsException: String index out of range: 25
>       at java.lang.String.substring(Unknown Source)
>       at 
> org.apache.axiom.om.util.UUIDGenerator.getInitialUUID(UUIDGenerator.java:94)
>       at org.apache.axiom.om.util.UUIDGenerator.getUUID(UUIDGenerator.java:54)
>       at 
> org.apache.axis2.description.AxisOperation.<init>(AxisOperation.java:90)
>       at 
> org.apache.axis2.description.AxisOperation.<init>(AxisOperation.java:95)
>       at 
> org.apache.axis2.description.TwoChannelAxisOperation.<init>(TwoChannelAxisOperation.java:52)
>       at 
> org.apache.axis2.description.OutInAxisOperation.<init>(OutInAxisOperation.java:65)
>       at 
> org.apache.axis2.description.RobustOutOnlyAxisOperation.<init>(RobustOutOnlyAxisOperation.java:47)
>       at org.apache.axis2.client.Stub.addAnonymousOperations(Stub.java:233)
>       
> (原文)
> UUIDGenerator.getInitialUUIDのロジックに問題があり、ごく稀にですが、スタブのオブジェクト生成時にStringIndexOutOfBoundsExceptionが発生します。
> 原因はInteger.toHexStringで数値を文字列化する際に"01"のような数値だと"1"となり、桁数が減ってしまうためです。
> なぜこのような処理をしているのか、理解できていないのですが、単純に0埋めすれば解決する問題でしょうか?
> このバグを修正していただけると幸いです。
> 【該当プログラム】
> public class UUIDGenerator {
>       /* 省略 */
>     protected static String getInitialUUID() {
>         if (myRand == null) {
>             myRand = new Random();
>         }
>         long rand = myRand.nextLong();
>         String sid;
>         try {
>             sid = InetAddress.getLocalHost().toString();
>         } catch (UnknownHostException e) {
>             sid = Thread.currentThread().getName();
>         }
>         StringBuffer sb = new StringBuffer();
>         sb.append(sid);
>         sb.append(":");
>         sb.append(Long.toString(rand));
>         MessageDigest md5 = null;
>         try {
>             md5 = MessageDigest.getInstance("MD5");
>         } catch (NoSuchAlgorithmException e) {
>             throw new OMException(e);
>         }
>         md5.update(sb.toString().getBytes());
>         byte[] array = md5.digest();
>         StringBuffer sb2 = new StringBuffer();
>         for (int j = 0; j < array.length; ++j) {
>             int b = array[j] & 0xFF;
>             sb2.append(Integer.toHexString(b)); // 
> ここが問題!Integer.toHexStringで"01"の数値が"1"の文字列になり、桁数が減る
>         }
>         int begin = myRand.nextInt();
>         if (begin < 0) begin = begin * -1;
>         begin = begin % 8;
>         return sb2.toString().substring(begin, begin + 18).toUpperCase(); // 
> ここでStringIndexOutofBoundsExceptionが発生
>     }
>     /* 省略 */
> }
> 【トレース内容】
> java.lang.StringIndexOutOfBoundsException: String index out of range: 25
>       at java.lang.String.substring(Unknown Source)
>       at 
> org.apache.axiom.om.util.UUIDGenerator.getInitialUUID(UUIDGenerator.java:94)
>       at org.apache.axiom.om.util.UUIDGenerator.getUUID(UUIDGenerator.java:54)
>       at 
> org.apache.axis2.description.AxisOperation.<init>(AxisOperation.java:90)
>       at 
> org.apache.axis2.description.AxisOperation.<init>(AxisOperation.java:95)
>       at 
> org.apache.axis2.description.TwoChannelAxisOperation.<init>(TwoChannelAxisOperation.java:52)
>       at 
> org.apache.axis2.description.OutInAxisOperation.<init>(OutInAxisOperation.java:65)
>       at 
> org.apache.axis2.description.RobustOutOnlyAxisOperation.<init>(RobustOutOnlyAxisOperation.java:47)
>       at org.apache.axis2.client.Stub.addAnonymousOperations(Stub.java:233)
>       

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ws.apache.org
For additional commands, e-mail: dev-h...@ws.apache.org

Reply via email to