JiBX1.2 处理XML

原创 2016年05月30日 17:28:12

内容概要:本博文将讲解在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&



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

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

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

Jibx

jibx基础简介一 一 JiBX 简介 JiBX 是一个绑定 XML 数据到 Java 对象的框架。JiBX 用一个绑定定义文挡(binding definition document)来定义 XML...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Jibx 处理XML

原文地址:http://www.cnblogs.com/hoojo/archive/2011/04/27/2030205.html Jibx 处理XML 前面有介绍过json-lib这个框架,...

Jibx 处理XML

Jibx 处理XML 前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 以及J...

Jibx 处理XML

前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 以及Jackson这个框...

java 处理 XML

Java 处理 XML 有很多不同的技术,主要可以分成两个大类 DOM 和SAX 具体区别如下 Table 1: SAX and DOM features SAX DOM Event ba...

xml处理

XML 处理方式  Java 程序员耳熟能详的 JDOM,DOM4J 等等, 它们基本上属于对 DOM 接口功能的扩充,保留了很多 DOM API 的特性  SAX 使用了最少的系统资源和最快速的解...

Jibx 处理XML

前面有介绍过json-lib这个框架,在线博文:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html 以及Jackson这个框架,...

oracle xml处理

【原创】编写Oracle存储过程,按照条件把数据导出至XML文件需要解析的xml文件:people.xml 1  2  3      4       ...

Python处理XML

使用python开发时,由于python的开源生态圈非常的给力,对于实现同一个功能,往往在这方面的类库非常多,而开发者也同样面临着如何选择最佳的 类库作为辅助开发的工具。本文将记录本人在使用pytho...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)