`
wolfmaster
  • 浏览: 158693 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Content is not allowed in prolog

阅读更多

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.Reader;

import java.io.Writer;

import java.util.Map;

 

import mqq.sdet.dbt.protocol.DBTResp;

import mqq.sdet.xhttp.XResp;

 

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.io.xml.DomDriver;

 

/**

 * @author just 

 * @since  XHttp 0.9

 * 

 */

public class XMLEndecoder {

public static final String XML_DECLARATION = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";

public static final String DEFAULT_ENCODING = "UTF-8";

public static final String REQ = "REQ";

public static final String RESP= "RESP";

protected String encoding;

 

protected XStream xstream = new XStream(new DomDriver());

public XMLEndecoder(){

setEncoding(DEFAULT_ENCODING);

}

public XMLEndecoder(String en){

setEncoding(en);

}

public String getEncoding() {

return encoding;

}

public void setEncoding(String encoding) {

this.encoding = encoding;

}

public void encodeReq(Object req,OutputStream os) throws IOException{

encode(req,os);

}

public void encodeResp(XResp resp,OutputStream os) throws IOException{

encode(resp,os);

}

public void encode(Object object,OutputStream os) throws IOException{

if(object == null){

throw new IOException("Encode:Instance can not be null!");

}

Writer wt   = null;

try {

wt = new OutputStreamWriter(os,encoding);

wt.write(XML_DECLARATION);

xstream.toXML(object, wt);

} catch (IOException e) {

throw e;

}finally{

if(wt != null){

wt.close();

}

}

}

 

 

public XResp decodeResp(InputStream is) throws IOException{

Reader reader   = null;

XResp resp   = null;

try {

reader = new InputStreamReader(is,encoding);

resp = (XResp)xstream.fromXML(reader);

} catch (IOException e) {

throw e;

}finally{

if(reader != null){

reader.close();

}

}

return resp;

}

// public XReq decodeReq(InputStream is) throws IOException{

// Reader reader   = null;

// XReq req   = null;

// try {

// reader = new InputStreamReader(is,encoding);

// req = (XReq)xstream.fromXML(reader);

// } catch (IOException e) {

// throw e;

// }finally{

// if(reader != null){

// reader.close();

// }

// }

// return req;

// }

@SuppressWarnings("unchecked")

public Map<String,String> decodeMap(InputStream is) throws IOException{

Reader reader   = null;

Map<String,String> handleMap = null;

try {

reader = new InputStreamReader(is,encoding);

handleMap = (Map<String, String>) xstream.fromXML(reader);

} catch (IOException e) {

throw e;

}finally{

if(reader != null){

reader.close();

}

}

return handleMap;

}

//@SuppressWarnings("unchecked")

public Object decodeObject(InputStream is) throws IOException{

Reader reader   = null;

Object object = null;

try {

reader = new InputStreamReader(is,encoding);

object = xstream.fromXML(reader);

} catch (IOException e) {

throw e;

}finally{

if(reader != null){

reader.close();

}

}

return object;

}

}

 

--------------------------------------------------------上面是解析xml为object方法------------------------------

 

-----------------------------调用如下------------------

public static void main(String[] args){

XMLEndecoder endecoder = new XMLEndecoder();

endecoder.setEncoding("UTF-8");

DBTResp resp;

try {

resp = (DBTResp) endecoder.decodeObject(new FileInputStream("C:\\DBTResp.xml"));

System.out.println(resp.getModuleName());

System.out.println(resp.taskResults.size());

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

如果 DBTResp.xml 文件用记事本打开另存为utf-8就会报错。。。Content is not allowed in prolog

解决方法: 文件用记事本打开另存为ASCII就可以

 

分享到:
评论
2 楼 unique.wu 2012-09-21  
用fileReader包一下你要序列化的文件就可以了~
1 楼 jiang562 2011-03-04  
不是所有情况都可以用记事本打开的

相关推荐

Global site tag (gtag.js) - Google Analytics