关闭

JiBX1.2 处理XML

1135人阅读 评论(0) 收藏 举报
分类:

内容概要:本博文将讲解在JiBX下处理XML文件。涉及到如何把Java bean文件生成相应的binding.xml和xml schema文件、如何根据binding.xml文件进行JiBX编译以及简单测试。

思路:由java二进制class文件A生成xml的连接文件B--》 根据连接文件B和原始的二进制文件A编译得到二进制clas文件A2。A2就是我们的目标。

操作环境:linux

JiBX版本:2.1.6

辅助工具:Intelij IDEA或者Eclipse


1、安装jibx。

只需要下载安装包,解压到某一目录即可。本人的目录是:/home/liangyh//Music/jibx


2、Java bean代码

https://github.com/liangyihuai/Netty4.0Learn/tree/master/src/com/huai/netty/jibx/pojo


3、生成binding.xml和xml schema文件

注意,在这一步中,我们操作的是java 编译后的class二进制文件,不是java文本文件。如何得到java的二进制文件呢?可以使用Intelij IDEA 或者Eclipse生成。当然,还有其他的办法。

(1)、把class文件所在的src文件夹复制到jibx所安装的目录。


(2)、进入src目录,在命令行中输入下面命令,我们会看到新增加了两个文件binding.xml和projo.xsd,前一个是java pojo和xml的连接文件,后一个是bind.xml的xml的描述文件(xml schema),在下一步中,我们需要使用bind.xml文件进行编译:

java -cp ../lib/jibx-tools.jar:bin org.jibx.binding.generator.BindGen -s src com.huai.netty.jibx.pojo.Order



命令解释:

1、-cp:指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”

分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。
现在我们所依赖的是jibx-tools.jar包, 其中org.jibx.binding.generator.BindGen是该java包中的一个类。
2、-s 表示源文件所在路径,也是我们命令行窗口中所在的目录。
3、最后的是我们class二进制文件的包名。


4、jibx编译:同样是在src目录下,输入:

java -cp ../lib/jibx-bind.jar:bin org.jibx.binding.Compile -v binding.xml

JiBX编译的作用是根据连接文件和pojo对象的映射关系和规则动态修改pojo类。

需要注意的是,-v binding.xml指定了上一步所生成的连接文件。下图显示,编译之后,新生成了三个JiBX_binding***.class文件。

到了这一步,我们就可以不再使用我们的xml文件了。接下来我们就可以使用这些class文件测试了。所以,我们需要把它们放到适当的地方,比如,笔者使用的是Intelij IDEA,笔者把它们复制到了IDEA编译项目所在的目录,这样我就可以直接使用IDEA编写测试程序和运行它们。(可以有其他方法,总之能够使用这些class文件就可以了。)



5、测试

(1)、测试代码

/**
 * Created by liangyh on 5/27/16.
 */
public class Test {

    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 IOException, JiBXException {

        Test test = new Test();
        Order order = new Order();

        Customer customer = new Customer();
        customer.setCustomerNumber(424);
        customer.setFirstName("namedfasFirst");
        customer.setLastName("namefsdfLast");
        List<String> names = new ArrayList<>(3);
        names.add("name1");
        names.add("name2");
        names.add("name3");
        customer.setMiddleNames(names);
        order.setCustomer(customer);

        Address address = new Address();
        address.setCity("GuangDong");
        address.setPostCode("232kdfd");
        order.setBillTo(address);

        order.setRoderNumber(1214);

        order.setShipping(Shipping.DOMESTIC_EXPRESS);

        String body = test.encode2Xml(order);
        Order order1 = test.decode2Order(body);
        System.out.println(order1);

    }
}

运行结果:




参考资料:

http://www.cnblogs.com/hoojo/archive/2011/04/27/2030205.html

https://en.wikipedia.org/wiki/JiBX

http://www.ibm.com/developerworks/java/tutorials/j-jibx1/

http://jibx.sourceforge.net/fromcode/index.html

http://blog.163.com/sparkle_tiangz/blog/static/117590203201110944557436/?COLLCC=656382236&



0
0
查看评论

JiBX 的简单使用

在学习 Netty 的过程中,有使用 JiBX 的地方,所以这里简单记录一下使用方法。 JiBX 简介 JiBX 是一个绑定 XML 数据到 Java 对象的框架。JiBX 用一个绑定定义文挡(binding definition document)来定义 XML 数据与 Java 对象转...
  • liupeifeng3514
  • liupeifeng3514
  • 2018-01-09 10:23
  • 156

Jibx

jibx基础简介一 一 JiBX 简介 JiBX 是一个绑定 XML 数据到 Java 对象的框架。JiBX 用一个绑定定义文挡(binding definition document)来定义 XML 数据与 Java 对象转换的规则,这个文挡就是联系 XML 数据与 Java
  • kbeanwu
  • kbeanwu
  • 2011-07-11 14:20
  • 6209

Jibx 处理XML

原文地址:http://www.cnblogs.com/hoojo/archive/2011/04/27/2030205.html Jibx 处理XML 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/...
  • majian_1987
  • majian_1987
  • 2015-02-10 14:28
  • 1824

Jibx 使用入门

如何使用Jibx框架? 首先要明白,Ji
  • ITMAOO
  • ITMAOO
  • 2014-09-28 16:49
  • 784

JiBx:BindGen命令行--通过Java POJO对象产生bind.xml和xsd文件

JiBx:BindGen命令行--通过Java POJO对象产生bind.xml和xsd文件1. 官网下载JiBx包 最新版本的zip包是: jibx_1_2_6.zip2. 解压 我这里解压后的路径是: I:\Tech\2016\JiBx\jibx_1_2_6 3. 了解BindGen类...
  • hills
  • hills
  • 2015-07-03 14:52
  • 1959

JIBX 资源包

  • 2015-07-29 15:24
  • 20.03MB
  • 下载

jibx进行xml数据绑定的binging.xml配置

jibx性能基本上是xstream的2倍多,接近三倍。我做过jaxb和xstream的性能测试,xstream基本上是jaxb的2倍多。 jibx目前是性能最好的xml映射和序列化框架了。
  • skmbw
  • skmbw
  • 2013-09-21 12:39
  • 2896

jibx官网下载的jar以及开发文档

  • 2014-08-25 10:11
  • 18.32MB
  • 下载

JiBX初步

http://numenzq.iteye.com/blog/153919 作者:曾巧(numenzq) 等级:初级 摘要 JiBX是一款非常优秀的XML(Extensible Markup Language)数据绑定框架。它提供灵活的绑定映射文件实现数据对象与XML文件之间的转换;并不需...
  • caolaosanahnu
  • caolaosanahnu
  • 2012-04-01 20:34
  • 735

jibx-tools.jar

  • 2011-05-09 11:37
  • 462KB
  • 下载
    个人资料
    • 访问:201074次
    • 积分:3212
    • 等级:
    • 排名:第12615名
    • 原创:140篇
    • 转载:40篇
    • 译文:2篇
    • 评论:31条
    博客专栏
    最新评论