2012-05-21 39 views
0

我試圖將一個xml文件(作爲byte[])綁定到一個java對象。這是我的代碼 -org.xmlpull.v1.XmlPullParserException

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()給了我這個例外。我該怎麼辦?

FYI:運行作爲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); 
} 
+0

請追加Stacktrace。其中可能有有趣的信息。 –

+0

請將abc.dra.DRAAPI.inputConfigXML添加到您的問題 –

+0

@ChristianKuetbach我在開頭添加的代碼是** abc.dra.DRAAPI.inputConfigXML ** – hari

回答

2

的ByteArrayInputStream的是空:

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

表示在XML中找到\ u0 Bit作爲第一個字符。

確保您的內容在您的byte[]之內,並且UTF-8不以BOM開頭。

我不認爲,這裏的BOM是你的問題,但我經常遇到BOM和java。

更新

您不填寫byte[]。你要讀取文件內容到byte[]: 閱讀:File to byte[] in Java

順便說一句:byte[] xmlData = new byte[(int) file.length()];是不好的代碼風格,你因爲...會遇到較大的XML的文件的問題。如果它們大於Integer.MAX_VALUE,則會讀取損壞的文件。

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正確。

0

轉到mvn存儲庫路徑並刪除該文件夾的xml文件。

+0

由於我看到Maven出現這個問題,所以這個解決方案對我很有幫助。儘管如此,我仍然猶豫不決,因爲我認爲OP根本不在與Maven打交道。但對於將來有與Maven發生此問題的任何人,請嘗試一下。 – rbwhitaker

相關問題