StringIndexOutOfBoundsException in SaxHandler
"S. Seide" <[email protected]>
| Newsgroups | gmane.comp.java.jdom.general |
|---|---|
| Message-ID | <[email protected]> |
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 _______________________________________________ To control your jdom-interest membership: http://www.jdom.org/mailman/options/jdom-interest/[email protected]
expat_qname.patch
(text/plain, 859 B)
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));