Re: java.lang.ArrayIndexOutOfBoundsException

Stefan Haustein <[email protected]> Wed, 31 Mar 2004 02:00:43 +0200
Newsgroups gmane.text.xml.xmlpull.devel
Organization University of Dortmund
Message-ID <[email protected]>
Hi Floriola, David,

I am sorry, I think I had commented the nspCount part out by mistake 
when replacing similar code with ensureCapacity.

A general ensureCapacity method seems difficult because of the limited 
reflection capabilities of J2ME, and the int[] version seems to be 
required at only a single place.

Thanks for the error reports and fixes; I have submitted both fixes to 
CVS now.... reminds me that it is really time now to generate new 
release files...

BTW: You may want to subscribe to the kXML mailing list at

http://kxml.enhydra.org/project/mailingLists/index.html

Best regards
Stefan Haustein

David Goldfarb wrote:
> Hi,
> 
> I hit the same problem a few days ago, on a very similar project (in my
> case, a Wireless Village client). I also reinserted the commented out code,
> but I believe that the last line in the commented-out code
>   (nspCounts[depth] = nspCounts[depth - 1];)
> is not needed and should remain out.
> 
> You will soon hit another problem too, in the method nextImpl(), the
> handling of code Wbxml.SWITCH_PAGE is not quite correct; it needs to reset
> the nextId to the magic value one more time, or the second peekId() will
> return the wrong value.
>     int id = peekId ();
>     while(id == Wbxml.SWITCH_PAGE){
>       nextId = -2;                 <=== need to add this line
>       selectPage(readByte(), true);
>       id = peekId();
> 
> Finally, you will need to add handlers into the parseWapExtension() method.
> However, unlike the earlier changes, the changes I made here are
> WV-specific, so I'm not comfortable posting them here where someone might
> mistakenly introduce them into the WBXML code base or another project.
> Please contact me privately if you want those changes too.  (Also, I'll need
> my client's permission, is that code is closer to areas they view as
> proprietary)
> 
> Meta-question: I had meant to report these and other changes, but haven't
> yet had the time to figure out who was the code maintainer of the WBXML
> code. If the appropriate folks are reading this, please drop me a line.
> 
> David
> 
> ------------------------------------------
> Degel Software Ltd.
> David Goldfarb
> President
> [email protected]
> 7 Ha'Iris St.
> Beit Shemesh, 99512
> Israel
> tel: +972 (2) 999-5721
> fax: +972 (2) 991-6718
> mobile: +972 (67) 230-120
>   	
> 
> -----Original Message-----
> From: floriola2000 [mailto:[email protected]] 
> Sent: Tuesday, March 30, 2004 10:15 PM
> To: [email protected]
> Subject: [xmlpull-dev] java.lang.ArrayIndexOutOfBoundsException
> 
> Hi,
> 
> I am trying to decode the wbxml Login-Request document sent by a 
> Wireless Village phone. I have captured this document into a file 
> called file.wbxml using a sniffer, and I made a simple parser, like 
> below. 
> 
> I am using the latest kxml2 version from CVS and the xmlpull 
> xmlpull_1_1_3_4a_src.zip, without any modifications.
> 
> Here is my code:
> 
> public class WvParser extends WV {
>     // Do nothing
>     public WvParser() {};
> }
> 
> public class WvTestParser {
>     public static void main(String[] argv) throws Exception {
>         WvParser wp = new WvParser();
>         XmlPullParser xp = wp.createParser();
>         xp.setInput(new FileInputStream("file.wbxml"), null);
>         XmlSerializer xs = new KXmlSerializer();
>         xs.setOutput(System.out, null);
>         new Roundtrip(xp, xs).roundTrip();
>     }
> }
> 
> Now when I run this code, I get the following error:
> 
> <?xml version='1.0' ?><WV-CSP-Message xmlns="http://www.wireless-
> village.org/CSP1.1"><Session><SessionDescriptor>
> java.lang.ArrayIndexOutOfBoundsException: 4
> 	at org.kxml2.wap.WbxmlParser.getNamespaceCount
> (WbxmlParser.java:113)
> 	at Roundtrip.writeStartTag(Roundtrip.java:36)
> 	at Roundtrip.writeToken(Roundtrip.java:69)
> 	at Roundtrip.roundTrip(Roundtrip.java:122)
> 	at WvTestParser.main(WvTestParser.java:27)
> Exception in thread "main" 
> 
> The problem is this java.lang.ArrayIndexOutOfBoundsException
> 
> I looked into the code and in WbxmlParser.java file, around line 885, 
> I found the following commented code:
> 
>         /*        if (depth >= nspCounts.length) {
>                     int[] bigger = new int[depth + 4];
>                     System.arraycopy(nspCounts, 0, bigger, 0, 
> nspCounts.length);
>                     nspCounts = bigger;
>                 }
>         
>                 nspCounts[depth] = nspCounts[depth - 1]; */
> 
> If you uncomment this code, this ArrayIndexOutOfBoundsException
> error disapear. 
> 
> I also noticed that the code that I have uncommentd is doing the same 
> thing like ensureCapacity method, the diference is that 
> ensureCapacity has a String[] as first argument and returns a String
> [], while the uncomented code is using an int[] nspCounts. 
> 
> Would it be possible that you overload this ensureCapacity method, so 
> that it can handle also int[]? In this way the code that I have 
> uncommented can be changed like this:
> 
> nspCounts = ensureCapacity(nspCounts, depth + 4);
> nspCounts[depth] = nspCounts[depth - 1];
> 
> Would it also be possible to keep this code uncommented?
> 
> Thanks and best regards,
> Floriola
> 
> 
> 
> 
> 
>  
> Yahoo! Groups Links
> 
> 
> 
>  
> 




------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com.  Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/2U_rlB/TM
---------------------------------------------------------------------~->

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
     http://groups.yahoo.com/group/xmlpull-dev/

<*> To unsubscribe from this group, send an email to:
     [email protected]

<*> Your use of Yahoo! Groups is subject to:
     http://docs.yahoo.com/info/terms/