Jibx序列化xml

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
                
            
        
    

你可能感兴趣的:(Jibx序列化xml)