这段时间学习<
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包)
CMD执行成功 在class下生成binding.xml和xsd文件
然后把生成的binding.xml和pojo.xsd托到需要的位置 ,第一步完成
STEP2:更具binding.xml文件 生成Marshal和Unmarshal所需要的class文件
pom.xml中片段
org.jibx jibx-maven-plugin 1.2.6 ${basedir}/target/classes/jibx *binding.xml true jibx-bind compile bind
这里执行jibx-maven-plugin的goal任务 并把它绑定到了maven生命周期的compile阶段
这里可以直接使用mvn jibx:bind命令来运行插件 或者直接mvn clean install 就可以生产所需要Class文件,如下图所示:
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文件并且指定输出路径?希望做过或者了解的人不吝赐教