前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jibx插件的使用

Jibx插件的使用

作者头像
用户4919348
发布2019-04-22 10:37:40
9400
发布2019-04-22 10:37:40
举报
文章被收录于专栏:波波烤鸭波波烤鸭

  Jibx是一款非常优秀的XML文件数据绑定的框架,提供灵活的绑定映射文件,实现数据对象和XML文件之间的转换,并不需要修改既有的Java,另外,它的转换效率是目前很多其他开源项目都无法比拟的。本文来演示下如何使用

Jibx插件的使用

下载Jibx插件: 链接:https://pan.baidu.com/s/1Va9D8LZlxoVU5VndC7T1ag 提取码:oyjt

在这里插入图片描述
在这里插入图片描述

Pojo创建

Order类

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
package com.dpb.netty.xml.pojo;

/**
 * 
 * @author 波波烤鸭
 * @email dengpbs@163.com
 *
 */
public class Order {

    private long orderNumber;

    private Customer customer; 

    /** Billing address information. */
    private Address billTo;

    private Shipping shipping;

    /**
     * Shipping address information. If missing, the billing address is also
     * used as the shipping address.
     */
    private Address shipTo;

    private Float total;

    public long getOrderNumber() {
	return orderNumber;
    }

    public void setOrderNumber(long orderId) {
	this.orderNumber = orderId;
    }

    public Customer getCustomer() {
	return customer;
    }

    public void setCustomer(Customer customer) {
	this.customer = customer;
    }

    public Address getBillTo() {
	return billTo;
    }

    public void setBillTo(Address billTo) {
	this.billTo = billTo;
    }

    public Shipping getShipping() {
	return shipping;
    }

    public void setShipping(Shipping shipping) {
	this.shipping = shipping;
    }

    public Address getShipTo() {
	return shipTo;
    }

    public void setShipTo(Address shipTo) {
	this.shipTo = shipTo;
    }

    public Float getTotal() {
	return total;
    }

    public void setTotal(Float total) {
	this.total = total;
    }

    /*
     * (non-Javadoc)
     * 
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
	return "Order [orderNumber=" + orderNumber + ", customer=" + customer
		+ ", billTo=" + billTo + ", shipping=" + shipping.toString()
		+ ", shipTo=" + shipTo + ", total=" + total + "]";
    }

}

生成绑定文件

  我们想将绑定文件生成在src/main/resources/jibx目录下,进入cmd下,切换到maven项目的target/classes目录下

在这里插入图片描述
在这里插入图片描述

然后执行如下命令

代码语言:javascript
复制
java -cp c:\tools\工具\jibx_1_3_1\jibx\lib\jibx-tools.jar org.jibx.binding.generator.BindGen -t C:\tools\workspace\workspace-csdn\NettyLearn\src\main\resources\jibx -v  com.dpb.netty.xml.pojo.Customer com.dpb.netty.xml.pojo.Shipping com.dpb.netty.xml.pojo.Address com.dpb.netty.xml.pojo.Order com.dpb.netty.xml.pojo.OrderFactory

说明

代码语言:javascript
复制
java -cp ..libx-tools.jar ..BindGen -t 生成文件保存地址 -v 需要绑定文件的class文件 完整包名.类名
在这里插入图片描述
在这里插入图片描述

对字节码增强

方式1:jibx-bind.jar增强

未增强前:

在这里插入图片描述
在这里插入图片描述

执行如下命令:

代码语言:javascript
复制
java -cp c:\tools\工具\jibx_1_3_1\jibx\lib\jibx-bind.jar org.jibx.binding.Compile -v C:\tools\workspace\workspace-csdn\NettyLearn\src\main\resources\jibx\binding.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方式2:maven插件动态增强

  在maven项目中如果能够通过插件动态的增强,那么实现起来就比较方便,实现步骤如下:

代码语言:javascript
复制
<dependency>
	<groupId>org.jibx</groupId>
	<artifactId>jibx-run</artifactId>
	<version>1.3.1</version>
</dependency>
<dependency>
	<groupId>org.jibx</groupId>
	<artifactId>jibx-extras</artifactId>
	<version>1.3.1</version>
</dependency>

<build>
	<plugins>
		<plugin>
			<!-- 生成jibx class信息 -->
			<groupId>org.jibx</groupId>
			<artifactId>jibx-maven-plugin</artifactId>
			<version>1.3.1</version>
			<configuration>
				<schemaBindingDirectory>${basedir}/src/main/resources/jibx</schemaBindingDirectory>
				<includeSchemaBindings>
					<includeSchemaBindings>*binding.xml</includeSchemaBindings>
				</includeSchemaBindings>
				<verbose>true</verbose>
			</configuration>
			<executions>
				<execution>
					<id>jibx-bind</id>
					<phase>compile</phase>
					<!-- 把jibx绑定到了comile编译阶段 -->
					<goals>
						<goal>bind</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

执行install即可增强class文件

在这里插入图片描述
在这里插入图片描述

测试

  执行如下测试代码

代码语言:javascript
复制
package com.dpb.netty.xml;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import org.jibx.runtime.BindingDirectory;
import org.jibx.runtime.IBindingFactory;
import org.jibx.runtime.IMarshallingContext;
import org.jibx.runtime.IUnmarshallingContext;
import org.jibx.runtime.JiBXException;

import com.dpb.netty.xml.pojo.Order;
import com.dpb.netty.xml.pojo.OrderFactory;

public class TestOrder {
	private IBindingFactory factory = null;
	private StringWriter writer = null;
	private StringReader reader = null;
	private final static String CHARSET_NAME = "UTF-8";

	private String encode2Xml(Order order) throws JiBXException, IOException {
		factory = BindingDirectory.getFactory(Order.class);
		writer = new StringWriter();
		IMarshallingContext mctx = factory.createMarshallingContext();
		mctx.setIndent(2);
		mctx.marshalDocument(order, CHARSET_NAME, null, writer);
		String xmlStr = writer.toString();
		writer.close();
		System.out.println(xmlStr.toString());
		return xmlStr;
	}

	private Order decode2Order(String xmlBody) throws JiBXException {
		reader = new StringReader(xmlBody);
		IUnmarshallingContext uctx = factory.createUnmarshallingContext();
		Order order = (Order) uctx.unmarshalDocument(reader);
		return order;
	}

	public static void main(String[] args) throws JiBXException, IOException {
		TestOrder test = new TestOrder();
		Order order = OrderFactory.create(123);
		String body = test.encode2Xml(order);
		Order order2 = test.decode2Order(body);
		System.out.println(order2);
	}
}
在这里插入图片描述
在这里插入图片描述

XML的序列化和反序列执行成功。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Jibx插件的使用
    • Pojo创建
      • 生成绑定文件
        • 对字节码增强
          • 方式1:jibx-bind.jar增强
          • 方式2:maven插件动态增强
        • 测试
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档