0

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)

4

1 に答える 1

0

「CodePage」についてよくわかりません

これは CodePage に関するものではありません。これは、配列と配列の次元に関するものです。しかし、あなたの例外はこれに依存していません。

UPDATE1わかりまし た、問題はここにあると思います:

WBXML.javaの 447 行

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

qName.lastIndexOf(":") は -1 を返す場合があります。これは、qName に ":" 記号がないことを意味します。

于 2013-09-17T13:35:20.090 に答える