我正在尝试将 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) 解析(未知来源)