http://www.cnblogs.com/zyfxlv/archive/2013/01/23/2872955.html

本项目是一个webseriice的客户端项目

Action 类:

SearchHotelRQ reqobj = XmlObjUtil.xml2Obj(reqstr, SearchHotelRQ.class);

SearchHotelRS searchHotelRS = port.searchHotel(reqobj);

resxml = XmlObjUtil.objToXmlString(searchHotelRS);

return resxml;

对象转为xml的方法:objToXmlString

复制代码

public static String objToXmlString(T obj) throws JAXBException {

JAXBContext jc = JAXBContext.newInstance(obj.getClass());

Marshaller m = jc.createMarshaller();

m.setProperty(“jaxb.formatted.output”, true);

ByteArrayOutputStream out = new ByteArrayOutputStream();

Result result = new StreamResult(out);

m.marshal(obj, result);

//转码

byte[] bystr = out.toByteArray();

String str = “";

try {

str = new String(bystr,“UTF-8”);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

StringBuffer sb = new StringBuffer(str.replace(“”, “"));

//log.error(“JAXB transform object to string without version: “+ sb.toString());

return sb.toString();

}

复制代码

第一种转码方式(在网上找的): m.setProperty(Marshaller.JAXB_ENCODING, “UTF-8”);但在我这个项目中不起作用,不知为什么

第二种:上面方法中转码那一步,如果不转码,直接这么写的话,StringBuffer sb = new StringBuffer(new String(out.toByteArray()).replace(“”, “"));取到的中文是乱码

分类: 其他方面