【发布时间】:2013-09-21 23:05:53
【问题描述】:
我正在尝试将 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
您可以看到 cmets 注意到需要将 xml 流作为参数传入。我在下面的代码中这样做。
" /** * 将 XML 输入流转换为 WBXML 输出流 * * @param 在要读取的 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 在 java.lang.String.substring(未知来源) 在 tags.WBXMLClass$XMLHandler.startElement(WBXMLClass.java:447) 在 com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(未知来源) 在 com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDriver.scanRootElementHook(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(未知来源) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知来源) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知来源) 在 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(未知来源) 在 com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(未知来源) 在 tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java:370) 在 Test.main(Test.java:452)
【问题讨论】:
-
你能发布堆栈跟踪吗?
-
Test [Java Application] Test at localhost:28099 Thread [main] (Suspended (exception StringIndexOutOfBoundsException)) XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) 行:不可用 SAXParserImpl$JAXPSAXParser(XMLParser).parse (XMLInputSource) 行:不可用 SAXParserImpl$JAXPSAXParser(AbstractSAXParser).parse(InputSource) 行:不可用 SAXParserImpl$JAXPSAXParser.parse(InputSource) 行:不可用 WBXMLClass.convertXmlToWbxml(InputStream, OutputStream) 行:371 Test.main(String []) 行:459
标签: java android xml eclipse wbxml