本项目是一个webseriice的客户端项目
Action 类:
SearchHotelRQ reqobj = XmlObjUtil.xml2Obj(reqstr, SearchHotelRQ.class); SearchHotelRS searchHotelRS = port.searchHotel(reqobj); resxml = XmlObjUtil.objToXmlString(searchHotelRS); return resxml;
对象转为xml的方法:objToXmlString
public static <T> 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("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", "")); //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("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", ""));取到的中文是乱码