0

byte[]xml ファイル (として) を Java オブジェクトにバインドしようとしています。これは私のコードです-

public voidinputConfigXML(String xmlfile, byte[] xmlData) {
    IBindingFactory bFact = BindingDirectory.getFactory(GroupsDTO.class);
                IUnmarshallingContext uctx = bFact.createUnmarshallingContext();
                groups = (GroupsDTO) uctx.unmarshalDocument(new ByteArrayInputStream(xmlData), "UTF8");
}

unmarshalDocument()私にこの例外を与えています。私は何をしますか?

参考: JUnit テスト ケースとして実行

以下はスタックトレースです -

    Error parsing document (line 1, col 1)
    org.xmlpull.v1.XmlPullParserException: only whitespace content allowed before start tag and not \u0 (position: START_DOCUMENT seen \u0... @1:1) 
        at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1519)
        at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1395)
        at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
        at org.jibx.runtime.impl.XMLPullReaderFactory$XMLPullReader.next(XMLPullReaderFactory.java:291)
        at org.jibx.runtime.impl.UnmarshallingContext.toStart(UnmarshallingContext.java:451)
        at org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:2755)
        at org.jibx.runtime.impl.UnmarshallingContext.unmarshalDocument(UnmarshallingContext.java:2905)
        at abc.dra.DRAAPI.inputConfigXML(DRAAPI.java:31)
        at abc.dra.XMLToObject_Test.test(XMLToObject_Test.java:34)
        [...]

これはバイト[]を形成する私のコードです-

void test() {
String xmlfile = "output.xml"
File file = new File(xmlfile);
byte[] xmlData = new byte[(int) file.length()];
groups = dra.inputConfigXML(xmlfile, xmlData);
}
4

3 に答える 3

2

ByteArrayInputstream は空です:

only whitespace content allowed before start tag and not \u0 
(position: START_DOCUMENT seen \u0... @1:1) 

\u0 ビットが XML 内の最初の文字として検出されたことを意味します。

内にコンテンツがあり、UTF-8 がBOMbyte[]で始まらないことを確認してください。

ここでは BOM が問題だとは思いませんが、BOM と Java に関してよく遭遇します。

アップデート

を埋めませんbyte[]。ファイルの内容をbyte[]: read this: File to byte[] in Javaに読み込む必要があります

ところで:byte[] xmlData = new byte[(int) file.length()];は悪いコード スタイルです。これは、より大きな XML ファイルで問題が発生するためです。それらがあなたよりも大きい場合Integer.MAX_VALUE、破損したファイルを読み取ります。

于 2012-05-21T10:36:19.900 に答える
0

Hari、
JiBX は入力として文字が必要です。エンコーディングの指定が間違っていると思います。代わりに次のコードを試してください。

FileInputStream fis = new FileInputStream("output.xml");
InputStreamReader isr = new InputStreamReader(fis, "UTF8");
groups = (GroupsDTO) uctx.unmarshalDocument(isr);

作成したコードを使用する必要がある場合は、テキストをコンソール (System.put.println(xxx)) に出力して、utf-8 を正しくデコードしていることを確認します。

ドン

于 2012-05-22T06:22:28.420 に答える
0

mvn リポジトリ パスに移動し、xml ファイルのそのフォルダーを削除します。

于 2012-06-05T13:08:32.607 に答える