Re: StringIndexOutOfBoundsException in SaxHandler
"Bradley S. Huffman" <[email protected]>
| Newsgroups | gmane.comp.java.jdom.general |
|---|---|
| Message-ID | <[email protected]> |
But http://xml.org/sax/features/namespace-prefixes is set to true in SAXBuilder (along with http://xml.org/sax/features/namespaces), so my understanding is getQName() should never be "". If its a unprefixed name, then getQName() should be returning the same as getLocalName(). In this case "version". I can't remember, can you turn either of those SAX features off in SAXBuilder? Brad On Tue, Jul 28, 2009 at 11:54 AM, S. Seide<[email protected]> wrote: > Hello, > > using jdom 1.1.1 on android 1.5 gives an > StringIndexOutOfBoundsException. Androids default XML-Parser ExPat > returns for Attributes without namespace an emtpy qname: > > <?xml version="1.0" encoding="UTF-8"?> > <config version="2009-07-23" summary="main AVF configuration file"> > </config> > > atts.getLocalName(i) - "version" > atts.getQName(i) - "" > > This seems to be the expected behavior, since > http://www.saxproject.org/apidoc/org/xml/sax/Attributes.html#getQName(int) > says getQName returns an empty string if no qualified name is available: > > getQName > public java.lang.String getQName(int index) > Look up an attribute's XML qualified (prefixed) name by index. > > Parameters: > index - The attribute index (zero-based). > Returns: > The XML qualified name, or the empty string if none is available, or > null if the index is out of range. > > StackTrace: > >> 07-28 14:54:10.354: ERROR/Global(725): java.lang.StringIndexOutOfBoundsException >> 07-28 14:54:10.354: ERROR/Global(725): at java.lang.String.substring(String.java:1571) >> 07-28 14:54:10.354: ERROR/Global(725): at org.jdom.input.SAXHandler.startElement(SAXHandler.java:568) >> 07-28 14:54:10.354: ERROR/Global(725): at org.apache.harmony.xml.ExpatParser.startElement(ExpatParser.java:145) >> 07-28 14:54:10.354: ERROR/Global(725): at org.apache.harmony.xml.ExpatParser.append(Native Method) >> 07-28 14:54:10.354: ERROR/Global(725): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:506) >> 07-28 14:54:10.354: ERROR/Global(725): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467) >> 07-28 14:54:10.354: ERROR/Global(725): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:329) >> 07-28 14:54:10.354: ERROR/Global(725): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:286) >> 07-28 14:54:10.354: ERROR/Global(725): at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518) >> 07-28 14:54:10.354: ERROR/Global(725): at org.jdom.input.SAXBuilder.build(SAXBuilder.java:865) >> 07-28 14:54:10.354: ERROR/Global(725): at com.tlabs.avf.AVFGlobal.addInputStreams(AVFGlobal.java:538) >> 07-28 14:54:10.354: ERROR/Global(725): at com.tlabs.avf.AVFGlobal.initialize(AVFGlobal.java:630) >> 07-28 14:54:10.354: ERROR/Global(725): at com.tlabs.avf.AVFMain.init(AVFMain.java:122) >> 07-28 14:54:10.354: ERROR/Global(725): at com.tlabs.avf.test.AVFMainTest.onCreate(AVFMainTest.java:78) >> 07-28 14:54:10.354: ERROR/Global(725): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) >> 07-28 14:54:10.354: ERROR/Global(725): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) >> 07-28 14:54:10.354: ERROR/Global(725): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) >> 07-28 14:54:10.354: ERROR/Global(725): at android.app.ActivityThread.access$1800(ActivityThread.java:112) >> 07-28 14:54:10.354: ERROR/Global(725): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) >> 07-28 14:54:10.354: ERROR/Global(725): at android.os.Handler.dispatchMessage(Handler.java:99) >> 07-28 14:54:10.354: ERROR/Global(725): at android.os.Looper.loop(Looper.java:123) >> 07-28 14:54:10.354: ERROR/Global(725): at android.app.ActivityThread.main(ActivityThread.java:3948) >> 07-28 14:54:10.354: ERROR/Global(725): at java.lang.reflect.Method.invokeNative(Native Method) >> 07-28 14:54:10.354: ERROR/Global(725): at java.lang.reflect.Method.invoke(Method.java:521) >> 07-28 14:54:10.354: ERROR/Global(725): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) >> 07-28 14:54:10.354: ERROR/Global(725): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) >> 07-28 14:54:10.354: ERROR/Global(725): at dalvik.system.NativeStart.main(Native Method) > > patch attached - adding this simple check my xml document is parsed > successfully on android 1.5. > > regards, > S. Seide > > > diff -ur src/java/org/jdom/input/SAXHandler.java src_patch/java/org/jdom/input/SAXHandler.java > --- src/java/org/jdom/input/SAXHandler.java 2009-07-28 17:46:40.703125000 +0200 > +++ src_patch/java/org/jdom/input/SAXHandler.java 2009-07-28 17:31:06.546875000 +0200 > @@ -564,7 +564,7 @@ > // patch from Mattias Jiderhamn > if ("".equals(attLocalName) && attQName.indexOf(":") == -1) { > attribute = factory.attribute(attQName, atts.getValue(i), attType); > - } else if (!attQName.equals(attLocalName)) { > + } else if (!attQName.equals(attLocalName) && attQName.length()>0) { > String attPrefix = attQName.substring(0, attQName.indexOf(":")); > Namespace attNs = Namespace.getNamespace(attPrefix, > atts.getURI(i)); > > _______________________________________________ > To control your jdom-interest membership: > http://www.jdom.org/mailman/options/jdom-interest/[email protected] > _______________________________________________ To control your jdom-interest membership: http://www.jdom.org/mailman/options/jdom-interest/[email protected]