Jibx使用文档
来源:互联网 发布:java标识符有哪些 编辑:程序博客网 时间:2024/05/16 14:37
1.软件安装
1.1 系统环境
· Linux: Fedora 17 x86.64
1.2 软件下载
http://sourceforge.net/projects/jibx/files/
1.3 注意事项
Jibx工具主要是对XML格式的数据进行解析,进行解析时需要一个模板类,调用编译命令Jibx工具箱能根据模板类生成一个XML文件,再调用编译命令对XML文件进行编译,生成相应的.class,这些class才是最终需要的东西。因此模板类的定义需要与最终的文件格式相对应。
下载的Jibx包中包含了多个文件夹,example和tutorial文件夹中包含了实例和教程,lib文件夹中包含了所程序运行所需要的包。
2 软件使用
2.1 新建工程
在一个Eclipse下新建一个Java工程,在其中新建一个包,命名为com.iap.dal,接着往工程中导入相关的Jibx的jar文件。
2.2 新建立模板类
在包com.iap.dal中新建2个类,分别为:Customer和Person
- Customer.java
public class Customer { public Person person; public String street; public String city; public String state; public Integer zip; public String phone; /*以下省略了set和get方法*/ ...... }
2. Person.java
public class Person { publicint customerNumber; public String firstName; public String lastName; /*以下省略了set和get方法*/ ...... }
2.3 由模板映射成XML文档
1. 在终端中进入到Jibx工程所在的目录,本机下运行:cd /home/xulexun/workspace/Jibx;
2. 运行:java -cp bin:/home/xulexun/下载/jibx/lib/jibx-tools.jar:/home/xulexun/下载/jibx/lib/log4j.jarorg.jibx.binding.generator.BindGen -b Customer.xml com.iap.dal.Customer ,其中/home/xulexun/下载/jibx/是jibx文件夹的所在位置, Customer.xml是将要生成的XML文件的名称,com.iap.dal.Customer 表示com.iap.dal包下的Customer.java文件,是XML文件数据的来源。
2.4 修改XML文件
生成的XML文件如下所示:
<binding xmlns:ns1="http://iap.com/dal" name="Customer"package="com.iap.dal"><namespace uri="http://iap.com/dal"default="elements"/><mapping abstract="true"type-name="ns1:customer" class="com.iap.dal.Customer"> <structure field="person" usage="optional"name="person"> <value style="attribute" name="customerNumber"field="customerNumber"/> <value style="element" name="firstName"field="firstName" usage="optional"/> <value style="element" name="lastName"field="lastName" usage="optional"/> </structure> <value style="element" name="street"field="street" usage="optional"/> <value style="element" name="city" field="city"usage="optional"/> <value style="element" name="state"field="state" usage="optional"/> <value style="attribute" name="zip"field="zip" usage="optional"/> <value style="element" name="phone"field="phone" usage="optional"/></mapping><mapping class="com.iap.dal.Customer"name="customer"> <structure map-as="ns1:customer"/></mapping></binding>
自动生成的XML文件存在缺陷,有时候或总是会显示字段不匹配的错误。
处理方法:
去掉<namespace uri="http://iap.com/dal"default="elements"/>
将<mapping abstract="true" type-name="ns1:customer" class="com.iap.dal.Customer"></binding>里的内容移动到 <mapping class="com.iap.dal.Customer"name="customer"></mapping>之间并将style设置成”element”,这样才能映射多种数据类型,如果style=”attribute”,那么XML文件将无法映射customerNumber和zip这种数据类型为int的成员变量。
修改后的XML文件如下所示:
<binding xmlns:ns1="http://iap.com/dal"name="Customer" package="com.iap.dal"><mapping class="com.iap.dal.Customer"name="customer"> <structure field="person" usage="optional"name="person"> <value style="element" name="customerNumber"field="customerNumber"/> <value style="element" name="firstName"field="firstName" usage="optional"/> <value style="element" name="lastName"field="lastName" usage="optional"/> </structure> <value style="element" name="street"field="street" usage="optional"/> <value style="element" name="city"field="city" usage="optional"/> <value style="element" name="state"field="state" usage="optional"/> <value style="element" name="zip"field="zip" usage="optional"/> <value style="element" name="phone"field="phone" usage="optional"/></mapping></binding>
2.5 编译XML文件
- 在终端进行入XML文件所在的根目录;
- 运行:java -cp bin:/home/xulexun/下载/jibx/lib/jibx-bind.jar org.jibx.binding.Compile -v Customer.xml ,注意要选择/jibx/lib/在计算机中的位置。
编译成功后会在~/bin/com/iap/dal/文件下多了2个class文件:JiBX_CustomerCustomer_access.calss 、JiBX_CustomerFactory.class,如果编译失败则需要根据相应的提示进行改进。
编译成功后生成的XML文件对程序的运行将变得无关紧要,不过调用Jibx要进行多次编译,所以建议保留所生成的XML文件。
3 在程序中调用JIBX
package com.iap.dal;import java.io.ByteArrayInputStream;import java.io.InputStream;import org.jibx.runtime.BindingDirectory;import org.jibx.runtime.IBindingFactory;import org.jibx.runtime.IUnmarshallingContext;import org.jibx.runtime.JiBXException; public class CustomerService{ publicvoid covertXML(String xmlString) { try { InputStream reader =String2InputStream(xmlString); IBindingFactory factory = BindingDirectory.getFactory(Customer.class); IUnmarshallingContext uctx =factory.createUnmarshallingContext(); Customer customerMessage =(Customer)uctx.unmarshalDocument(reader, null); Person personMessage =customerMessage.getPerson(); System.out.println(personMessage.getFirstName()); System.out.println(personMessage.getLastName()); System.out.println(customerMessage.getPhone()); System.out.println(customerMessage.getStreet()); System.out.println(customerMessage.getCity()); System.out.println(customerMessage.getState()); }catch (JiBXException e) { e.printStackTrace(); } } /** *将String类型转化为InputStream类型 */ public InputStream String2InputStream(String str) { ByteArrayInputStream stream = newByteArrayInputStream(str.getBytes()); return stream; } publicstatic void main(String[] args) { StringxmlString = "<customer>" + "<person>" + "<customerNumber>100</customerNumber>" + "<firstName>Jon</firstName>"+ "<lastName>lake</lastName>" + "</person>" + "<street>colleagestreet</street>" + "<city>nanning</city>" + "<state>China</state>"+ "<zip>1010</zip>" + "<phone>0577-110</phone>" + "</customer>"; //标签名称要与XML文件中的name字段相匹配 CustomerServiceservice = new CustomerService(); service.covertXML(xmlString); }}
JIBX对中文字符的支持:如果开发环境不是默认为UTF-8的,中文字符的映射会出现错误。在网上查找了很多资料,但是没有完整的例子,在偶然的情况下解决了此问题,不知道是不是完全解决,至少是在我现有的开发环境下是成功运行了。如果默认字符编码是GBK或GB2312的话,修改String2InputStream(String str) 方法:
public InputStream String2InputStream(String str) { ByteArrayInputStream stream = newByteArrayInputStream(str.getBytes(“UTF-8”)); //设置编码为UTF-8 return stream; }
- Jibx使用文档
- 使用 JiBX
- Jibx 使用入门
- JIBX的工具使用
- Jibx
- Jibx 结合 ant使用的一些心得
- 使用Axis2开发Web服务 --- 使用JiBX建立客户端
- JiBX初步
- 使用高性能xml序列化框架jibx作为spring mvc的xml view
- JiBX笔记总结
- Axis2之jibx
- Jibx 处理XML
- Jibx 处理XML
- Jibx 处理XML
- Jibx 处理XML
- Jibx 处理XML
- 体验jibx的灵活和快速
- DB2 pureXML 动态编程组合拳:iBatis+BeanUtils+JiBX
- adb shell 命令详解
- 链表头结点作用
- HDOJ 1047 Integer Inquiry
- 获取gridview隐藏列的值的方法
- C++ 的dynamic_cast
- Jibx使用文档
- Confluence 图片相册(Gallery)宏
- ISR 中断服务子程序的几个特点
- iOS验证手机号码
- 指针--学习小结
- linux shell 中的 lftp
- andriod驱动之旅-在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序(4)
- 一个golang http包自带的绝佳示例
- C# Random 随机数重复