JAVA对象与XML,JSON转换

//定义接口

public interface DataManage {
 
 String beanToString(Object obj) throws Exception;

 Object stringToBean(String str, Class<?> clazz) throws Exception;
}

 

//JSON与JAVA对象转换

public class JsonDataManage implements DataManage {

 private static final String JSON_EMPTY = "{}";

 @Override
 public String beanToString(Object obj) throws Exception {
  // TODO Auto-generated method stub
  if (obj == null)
   return JSON_EMPTY;
  return JSONObject.fromObject(obj).toString();
 }

 @Override
 public Object stringToBean(String str, Class<?> clazz) throws Exception {
  // TODO Auto-generated method stub
  if (StringUtils.isEmpty(str))
   return null;
  try {
   JSONObject jsonObject = JSONObject.fromObject(str);
   return JSONObject.toBean(jsonObject, clazz);
  } catch (JSONException e) {
   throw new Exception(e.getMessage() + ":" + str, e);
  }
 }
}

 

//JAVA对象与XML转换

public class XmlDataManage implements DataManage {

 private static final String EMPTY_STR = "";
 
 @Override
 public String beanToString(Object obj) throws Exception {
  // TODO Auto-generated method stub
  if (obj == null)
   return "";

  String xmlString = EMPTY_STR;
  try {
   JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
   Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
   jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
   StringWriter sw = new StringWriter();
   jaxbMarshaller.marshal(obj, sw);
   xmlString = sw.toString();
  } catch (JAXBException e) {
   throw new Exception("obj " + obj + " to string exception",
     e);
  }
  return xmlString;   
 }

 @Override
 public Object stringToBean(String str, Class<?> clazz) throws Exception {
  // TODO Auto-generated method stub
  Unmarshaller us = null;
  JAXBContext context = null;
  try {
   context = JAXBContext.newInstance(clazz);
   us = context.createUnmarshaller();
   
   StringReader reader = new StringReader(str);
   return us.unmarshal(reader);
  } catch(JAXBException e) {
   throw new Exception("string " + str + " to bean exception");
  }
 }

}

 

 //工厂模式整合转换过程

import org.apache.commons.lang.StringUtils;

public class DataManageFactory {
 private static final String JSON = "json";
 private static final String XML = "xml";

 private DataManageFactory() {
 }

 public static DataManage instance(String type) {
  DataManage dm = new XmlDataManage();

  if (StringUtils.isEmpty(type) || type.equals(XML)) {
   return dm;
  } else if (type.equals(JSON)) {
   return new JsonDataManage();
  }

  return dm;
 }
}

 //测试类

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Colleague")
public class Colleague {
 protected String username;
 protected String nickname;
 public Colleague() {
  super();
 }
 
 public Colleague(Colleague colleague) {
  username = colleague.username;
  nickname = colleague.nickname;
 }

 public Colleague(String username, String nickname,
   String avatar, String sign) {
  super();

  this.username = username;
  this.nickname = nickname;
 }

 

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getNickname() {
  return nickname;
 }

 public void setNickname(String nickname) {
  this.nickname = nickname;
 }

 }

 //测试代码

public class TestXML {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  data.setRelationers(relationers);
  try {
   String r = "";
   r = DataManageFactory.instance("xml").beanToString(data);
   System.out.println(r);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}

 

 

 

 

posted @ 2013-04-26 17:03  wang_tale  阅读(476)  评论(0编辑  收藏  举报