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());
}
链接:https://www.sodocs.net/doc/c214918147.html,/xcl119xcl/blog/item/eda41dc451d563ce39db49bb.html
import java.beans.IntrospectionException;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import https://www.sodocs.net/doc/c214918147.html,mons.betwixt.io.BeanReader;
import https://www.sodocs.net/doc/c214918147.html,mons.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("\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;
}
}