0

我正在尝试将 xml 转换为 wbxml 以将信息从假设备(iPhone、Android、Blackberry 等)传递到知道我正在发送的请求的服务器。我在这行代码中收到了 StringIndexOutOfBoundsException:

xr.parse(new InputSource(in));

我还将此代码添加到我的项目中以尝试进行转换: http ://code.google.com/p/k9mail/source/browse/k9mail/branches/activesync/src/com/android/email/mail/internet /WBXML.java?r=403

您可以看到注释说明需要将 xml 流作为参数传入。我在下面的代码中这样做。

" /** * 将 XML 输入流转换为 WBXML 输出流 * * @param in 要读取的 XML 流 * @param out 要写入的 WBXML 流 */ "

我对“CodePage”知之甚少,这可能是我在初始化“CodePage”数组时通过输入“1”来使用它的问题。我不知道该放什么。我确实知道,如果我取出数字“1”,那么 Eclipse 会抱怨我需要提供维度表达式或初始化数组。所以,也许这就是 stringindexoutofboundsexception 的来源,但直到后来才出现。无论如何,我也尝试了 1000 来初始化 CodePage 数组,但这也没有帮助。

CodePage[] codePage = new CodePage[ 1000 ];

我也知道这可能是一个更复杂的问题,我不能在这里发布我的整个项目。我感谢任何提供帮助的高级人员。即使只是在一般意义上帮助确定这一点,也非常感谢。

====================== 这是该问题链接中的相关代码===========

文件 1:

    File file19 = new File("data\\test.xml");
    InputStream is19 = new FileInputStream(file19);
    CodePage[] codePage = new CodePage[ 1 ];  // also tried 1000 here and made no difference, didn't help
    WBXMLClass wbxmlObject = new WBXMLClass( codePage );
    ByteArrayOutputStream byteArrayOutputStream19 = new ByteArrayOutputStream( );
    wbxmlObject.convertXmlToWbxml(is19, byteArrayOutputStream19 );

文件 2

 public void convertXmlToWbxml(InputStream in, OutputStream out) {

    SAXParserFactory spf = SAXParserFactory.newInstance();
    try {
        SAXParser sp = spf.newSAXParser();

        XMLReader xr = sp.getXMLReader();

        XMLHandler handler = new XMLHandler(out);

        xr.setContentHandler(handler);

        xr.parse(new InputSource(in));  // this is causing string index out of bounds ****************************
    } catch (ParserConfigurationException pce) {
        //Log.e("WBXML", "ParserConfigurationException in convertXmlToWbxml: " + pce);
    } catch (SAXException se) {
        //Log.e("WBXML", "SAXException in convertXmlToWbxml: " + se);
    } catch (IOException ioe) {
        //Log.e("WBXML", "IOException in convertXmlToWbxml: " + ioe);
    }
}

======================================

这是 Eclipse 中的错误:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:-1 at java.lang.String.substring(Unknown Source) at tags.WBXMLClass$XMLHandler.startElement(WBXMLClass.java:447) at com。 sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source) at com.sun.org。 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(Unknown Source) 上 com.sun.org.apache.xerces 上的 apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)。 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver 上的 internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(未知来源)。next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 上的 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)。 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) 上 com.sun.org.apache.xerces.internal 上的 apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)。 jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java:370) at Test.main(Test.java:452)next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 上 com.sun.org 上的 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)。 apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java: 370)在Test.main(Test.java:452)next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 上 com.sun.org 上的 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)。 apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java: 370)在Test.main(Test.java:452)解析(未知源)在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知源)在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(未知源)在com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at tags.WBXMLClass。在 Test.main(Test.java:452) 处的 convertXmlToWbxml(WBXMLClass.java:370)解析(未知源)在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知源)在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(未知源)在com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at tags.WBXMLClass。在 Test.main(Test.java:452) 处的 convertXmlToWbxml(WBXMLClass.java:370)在 Test.main(Test.java:452) 的 tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java:370) 解析(未知来源)在 Test.main(Test.java:452) 的 tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java:370) 解析(未知来源)

4

1 回答 1

0

我对“代码页”了解不多

这与 CodePage 无关。这是关于数组和数组维度的。但是您的例外并不依赖于此。

UPDATE1 好的,我认为问题出在这里:

WBXML.java中的 447 行

namespaceURI = qName.substring(0, qName.lastIndexOf(":"));

qName.lastIndexOf(":") 可能返回 -1,表示 qName 中没有“:”符号。

于 2013-09-17T13:35:20.090 回答