JiBX 简介
JiBX 是一个绑定 XML 数据到 Java 对象的框架。JiBX 用一个绑定定义文挡(binding definition document)来定义 XML 数据与 Java 对象转换的规则(binding.xml),这个文挡就是联系 XML 数据与 Java 对象之间的桥梁。
官网文档地址: http://jibx.sourceforge.net/index.html
使用 JiBX 的过程分成两个过程,一个是 binding compiler,另一个是 binding runtime。
binding compiler
是一个前期准备过程,包括定义绑定定义文挡,定义与 XML 绑定在一起的 Java 对象,然后编译。在这个过程,JiBX 比其他项目在操作上要简单,不用定义 DTD 和 Schema,缺点是需要自己定义 Java 程序。
binding runtime
是使用 binding compiler 编译好的 Java class 处理 XML 数据。
下载地址
https://sourceforge.net/projects/jibx/files/
里面包含很多实用的工具:
- bindgen - use JiBX binding and schema generation from code
- codegen - use JiBX binding and code generation from schema
- jibx2wsdl - use JiBX binding, WSDL, and schema generation from code
- starter - use JiBX with supplied (or hand-written) binding definition
使用org.jibx.binding.generator.BindGen
bindGen可以根据类生成对应的binding.xml
- linux:
java -cp ../../lib/jibx-tools.jar:bin org.jibx.binding.generator.BindGen
org.jibx.starter1.Order
- window
java -cp ..\..\lib\jibx-tools.jar;bin org.jibx.binding.generator.BindGen
org.jibx.starter.Order
例如:
E:\zhanghongfeng\eclipse\workspace\netty>java -cp target/classes;lib/jibx-tools.
jar;lib/jibx-bind.jar;lib/jibx-schema.jar;lib/log4j.jar org.jibx.binding.generat
or.BindGen -b /src/main/resources/employee-binding.xml com.journaldev.jibx.bean.
Employee
E:\zhanghongfeng\eclipse\workspace\netty>
- -cp 设置classpath路径,可以加入需要依赖的包。
- -b 设置生成的binding.xml文件存放路径及文件名
- 最后一个参数为需要转换的类
java文件
package com.journaldev.jibx.bean;
public class Employee {
private String id;
private String name;
private String hireDate;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHireDate() {
return hireDate;
}
public void setHireDate(String hireDate) {
this.hireDate = hireDate;
}
}
生成的binding.xml如下
jibx compile
使用如下命令执行compile
java -cp .:lib/support.jar:/home/dennis/jibx/lib/jibx-bind.jar
org.jibx.binding.Compile binding.xml
例如:
E:\zhanghongfeng\eclipse\workspace\netty>java -cp target/classes;lib/jibx-tools.
jar;lib/jibx-bind.jar;lib/jibx-schema.jar;lib/log4j.jar org.jibx.binding.Compile
employee-bind.xml
E:\zhanghongfeng\eclipse\workspace\netty>
这样就会在对应的class路径下生成:JiBX_employee_bindEmployee_access.class和JiBX_employee_bindFactory.class
jibx run
从xml中转换出类
/**
* 把xml的内容转换为实体类
* @param inputXml xml内容
* @param clazz 实体类名
* @return 实体类
*/
@SuppressWarnings("unchecked")
public T unMarshalEmployee(String inputXml,Class clazz){
try {
IBindingFactory bfact = BindingDirectory.getFactory(clazz);
IUnmarshallingContext uctx = bfact.createUnmarshallingContext();
StringReader stringReader = new StringReader(inputXml);
return (T) uctx.unmarshalDocument(stringReader, null);
} catch (JiBXException e) {
logger.error("转换类:{}异常",clazz.getName(),e);
}
return null;
}
把类转换成xml
/**
* 把类转换成xml
* @param employee 实体对象
* @return xml内容
*/
public String marshalEmployee(T t){
try {
IBindingFactory bfact = BindingDirectory.getFactory(Employee.class);
IMarshallingContext mctx = bfact.createMarshallingContext();
mctx.setIndent(2);
StringWriter stringWriter = new StringWriter();
mctx.setOutput(stringWriter);
mctx.marshalDocument(t, "UTF-8", null);
return stringWriter.toString();
} catch (JiBXException e) {
logger.error("把类:{}转换成xml异常。",t.getClass().getName(),e);
}
return null;
}
Jibx 的maven插件
org.jibx
jibx-maven-plugin
1.3.1
src/main/resources
*-binding.xml
template-binding.xml
true
install
bind
org.jibx
jibx-run
1.3.1
org.jibx
jibx-extras
1.3.1
org.jibx
jibx-bind
1.3.1