欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Maven下使用jibx插件使用

程序员文章站 2022-07-12 18:37:55
...

       这段时间学习<<netty权威指南>>过程中  偶遇到了XML绑定框架 jibx。书中是使用ant构建和配置的,但是我的环境是maven环境,而且没有用过ant,导致这部分学习遇到了困难。由于网上没有一整个过程的文档,所以整理了下使用的过程 以便后续学习和巩固。

 

STEP 1:   更具java bean 生成 binding.xml 和 xsd文件

 

书上的实体类

 

 

package nettyinprotocol.xml.pojo;
public class Order {

    private long orderNumber;
    private Customer customer;
    /** Billing address information. */
    private Address billTo;
    private Shipping shipping;
    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;
    }
    @Override
    public String toString() {
	return "Order [orderNumber=" + orderNumber + ", customer=" + customer
		+ ", billTo=" + billTo + ", shipping=" + shipping.toString()
		+ ", shipTo=" + shipTo + ", total=" + total + "]";
    }
}

需要更具这个实体类生成 binging.xml文件 

 

PS: 

①:jibx提供的工具包jibx-tools.jar和jibx-bind.jar,我这里使用的是jibx-tools

②:这边可以通过ant录制脚本生成或者直接在cmd命令行中执行 我这边使用的是cmd明令生成,

一个实体类对应一个binging.xml文件 可以存在多个

 

命令如下:

cmd

E:\setUPs\springToolSuite\workspace\netty\target\classes>java -cp bin;E:\jar\lib\jibx-tools.jar org.jibx.binding.generator.BindGen -b binding.xml nettyinprotocol.xml.pojo.Order

 

注意点:

1:CMD下的classPath是环境变量中的classpath  而我是在STS工具下用的maven,所以这边必须命令行进入到target下的classes下 才能找到或者执行Order.class

2:这边需要注意的是必须  用jibx-tools.jar包生成xml的时候,必须这个jar包所在文件夹中包含所有的jibx其他jar包 因为在生成binging.xml时候会用到其他jar包。(这边我原来是直接用的maven仓库下的jar但是总是失败  后来查阅官网发现必须有所有的jar才能执行,而maven仓库的目录结构如下图所示分散的,导致不能成功生成。后来重新下了一个完整的lib包)


Maven下使用jibx插件使用
            
    
    博客分类: netty学习笔记 nettyjibxmaven 
 CMD执行成功 在class下生成binding.xml和xsd文件

 


Maven下使用jibx插件使用
            
    
    博客分类: netty学习笔记 nettyjibxmaven 


 然后把生成的binding.xml和pojo.xsd托到需要的位置 ,第一步完成 

 

STEP2:更具binding.xml文件 生成Marshal和Unmarshal所需要的class文件

 

pom.xml中片段

				<plugin><!-- 生成jibx class信息 -->
					<groupId>org.jibx</groupId>
					<artifactId>jibx-maven-plugin</artifactId>
					<version>1.2.6</version>
					<configuration>
						<schemaBindingDirectory>${basedir}/target/classes/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>

 

这里执行jibx-maven-plugin的goal任务 并把它绑定到了maven生命周期的compile阶段

这里可以直接使用mvn jibx:bind命令来运行插件 或者直接mvn clean install 就可以生产所需要Class文件,如下图所示:


Maven下使用jibx插件使用
            
    
    博客分类: netty学习笔记 nettyjibxmaven 


Step 3:运行书上测试例子

 

/**
 * @author Lilinfeng
 * @date 2014年3月1日
 * @version 1.0
 */
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);

    }
}

 执行成功! 控制台可以输出转换信息

 

 

疑惑:

        个人觉得通过cmd方式生成bind文件相对来说比较死板,而我这个项目的打包发布构建都用的mvn,不可能单独为了这个写一段ant脚本。是否jibx还有其他插件 可以配置生成bind.xml文件并且指定输出路径?希望做过或者了解的人不吝赐教

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Maven下使用jibx插件使用
            
    
    博客分类: netty学习笔记 nettyjibxmaven 
  • 大小: 9.3 KB
  • Maven下使用jibx插件使用
            
    
    博客分类: netty学习笔记 nettyjibxmaven 
  • 大小: 5.9 KB
  • Maven下使用jibx插件使用
            
    
    博客分类: netty学习笔记 nettyjibxmaven 
  • 大小: 11.3 KB
相关标签: netty jibx maven