JiBX1.2 处理XML
发布日期:2021-06-30 17:51:34 浏览次数:2 分类:技术文章

本文共 3258 字,大约阅读时间需要 10 分钟。

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

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
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); }}
运行结果:

参考资料:

转载地址:https://liangyihuai.blog.csdn.net/article/details/51538858 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SolrCloud
下一篇:自定义一个安全的rm指令

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月17日 01时14分11秒