XML和javaBean的转化

2 篇文章 0 订阅

 

Myeclipse+jdk1.5以上版本自带JAXB工具(xml和javaBean的转化)

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到 XML实例文档。

 

 JAXBContext 提供了一个入口,通过这个入口可以管理必要的XML/Java绑定信息。客户端应用程序通过newInstance(contextPath)方法得到该类的新实例。contextPath 参数包含一个或多个Java包名,这些Java包就是了JAXB编译器所产生的接口代码所在的Java包。该参数值初始化JAXBContext 对象,使得它能够管理JAXB编译器产生的接口;对于 Marshaller和Unmarshaller,这两个对象主要是用于Java对象和XML文档互相转换的主要接口(Marshaller负责从 Java对象到XML文档的转换,Unmarshaller负责从XML文档到Java对象的转换)。

Unmarshaller.unmarshal() 的方法可以直接将一个XML文件里的数据转换成Java对象。

 

实例:

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import com.pobasoft.ws.Bean.CheckUserRsBean;
import com.pobasoft.ws.Bean.SelectUserIDListBean;
import com.pobasoft.ws.Bean.SelectUserIDListRsBean;
import com.pobasoft.ws.Interface.ExportEntityIDListInfo;
import com.pobasoft.ws.InterfaceImpl.ExportEntityListInfo;

public class Test {

    //*************XML-->JavaBean***********************  
    public static Object xmltojava(Class cls,File file) throws Exception{ 
      JAXBContext ctx=JAXBContext.newInstance(cls);
      //JAXBContext可以创建 Unmarshallers(将XML解析为Java对象)
      Unmarshaller us=ctx.createUnmarshaller();
      return us.unmarshal(file);
    }
    //*************JavaBean?XML***********************  
    public static void javatoxml(Object obj,File file) throws Exception{
      JAXBContext ctx=JAXBContext.newInstance(obj.getClass());
      //JAXBContext可以创建Marshallers(将Java对象转换成XML)
      Marshaller mar=ctx.createMarshaller();
      mar.marshal(obj,file);
    }
    //测试(CheckUserRsBean是已经创建好的Bean对象)在文件保存的操作代码中,也有对JAXB的操作:
    private void saveAsFile() {
      ......       
      m.marshal(myContainer, new FileOutputStream(filename));
      ......
   }
    public static void main(String[] args) throws Exception {
      CheckUserRsBean crb=new CheckUserRsBean();
      crb.setKey("abc");
      javatoxml(crb, new File("C:\\a.xml"));
      --------------------------------------
      File f=new File("C:\\a.xml");
      CheckUserRsBean crb= (CheckUserRsBean) xmltojava(CheckUserRsBean.class, f);
      System.out.println(crb.getKey());
  }

 

import java.beans.IntrospectionException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import org.apache.commons.betwixt.io.BeanReader; 
import org.apache.commons.betwixt.io.BeanWriter; 
import org.xml.sax.SAXException; import com.pobasoft.ws.Bean.SelectUserIDListBean;
public class XMLAndBeanUtil {
/**
* 将xml字符串转化为对象
* 
* @param xmlString
*        xml字符串
* @param className
*        类得全称(包名+类名)字符串
* @param cl
*        对象的class名称

* @return 转化成的对象
*/
public Object xmlString2Object(String xmlString ,String className,Class cl) {
  // 创建一个读取xml文件的流
  StringReader xmlReader = new StringReader(xmlString);
  // 创建一个BeanReader实例,相当于转化器
  BeanReader beanReader = new BeanReader();
  //配置BeanReader实例  
  beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);  
  beanReader.getBindingConfiguration().setMapIDs(false); //不自动生成ID  
  //注册要转换对象的类,并指定根节点名称  
  try {
       //beanReader.registerBeanClass("SelectUserIDListBean", SelectUserIDListBean.class);
         beanReader.registerBeanClass(className,cl);
  } catch (IntrospectionException e1) {
  // TODO Auto-generated catch block
    e1.printStackTrace();
  }  
  // 将XML解析Java Object
  Object obj = null;
  try {
   obj = beanReader.parse(xmlReader);
  } catch (IOException e) {
   e.printStackTrace();
  } catch (SAXException e) {
   e.printStackTrace();
  }
  return obj;
}

 

 

 

 

/**
* 将对象转换为xml字符串
*/
public String Object2XmlString(Object object) {
  String xmlString = null;
  // 创建一个输出流,将用来输出Java转换的XML文件
  StringWriter outputWriter = new StringWriter();
  // 输出XML的文件头
  outputWriter.write("<?xml version='1.0' ?>\n");
  // 创建一个BeanWriter实例,并将BeanWriter的输出重定向到指定的输出流
  BeanWriter beanWriter = new BeanWriter(outputWriter);
  // 配置BeanWriter对象
  beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);
  beanWriter.getBindingConfiguration().setMapIDs(false);
  beanWriter.setWriteEmptyElements(false);
  try {
   beanWriter.write(object);
  } catch (Exception e) {
   e.printStackTrace();
  }
  xmlString = outputWriter.toString();
  // 关闭输出流
  try {
   outputWriter.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return xmlString;
}
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值