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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.