xml を wbxml に変換して、偽のデバイス (iPhone、Android、Blackberry など) から、送信している要求を認識しているサーバーに情報を渡そうとしています。次のコード行で StringIndexOutOfBoundsException を受け取りました。
xr.parse(新しい 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 が発生するのはおそらくそこからですが、後になるまで表示されません。とにかく、CodePage配列を初期化するために1000も試しましたが、それも役に立ちませんでした。
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(不明なソース) 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(不明なソース) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java:370) at Test.main(Test.java:452)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(不明なソース) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(不明なソース) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java: 370) Test.main (Test.java:452) で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(不明なソース) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(不明なソース) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java: 370) Test.main (Test.java:452) でcom.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(不明なソース) の 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 (不明なソース) at tags.WBXMLClass. convertXmlToWbxml(WBXMLClass.java:370) の Test.main(Test.java:452)com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(不明なソース) の 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 (不明なソース) at tags.WBXMLClass. convertXmlToWbxml(WBXMLClass.java:370) の Test.main(Test.java:452)parse(不明なソース) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java:370) at Test.main(Test.java:452)parse(不明なソース) at tags.WBXMLClass.convertXmlToWbxml(WBXMLClass.java:370) at Test.main(Test.java:452)