这段时间学习<<netty权威指南>>过程中 偶遇到了XML绑定框架 jibx。书中是使用ant构建和配置的,但是我的环境是maven环境,而且没有用过ant,导致这部分学习遇到了困难。由于网上没有一整个过程的文档,所以整理了下使用的过程 以便后续学习和巩固。
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中片段
<plugin><!-- 生成jibx class信息 --> <groupId>org.jibx</groupId> <artifactId>jibx-maven-plugin</artifactId> <version>1.2.6</version> <configuration> <schemaBindingDirectory>${basedir}/target/classes/jibx</schemaBindingDirectory> <includeSchemaBindings> <includeSchemaBindings>*binding.xml</includeSchemaBindings> </includeSchemaBindings> <verbose>true</verbose> </configuration> <executions> <execution> <id>jibx-bind</id> <phase>compile</phase><!--把jibx绑定到了comile编译阶段 --> <goals> <goal>bind</goal> </goals> </execution> </executions> </plugin>
这里执行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文件并且指定输出路径?希望做过或者了解的人不吝赐教
相关推荐
这个压缩包的重点是使用 JAX-RS 和 JiBX Maven 插件的一个示例,旨在帮助开发者理解和应用这两个工具在实际项目中的集成。 【描述】中提到的 "maven-plugin.zip" 是一个基于 Maven 的插件,该插件用于演示如何使用 ...
Maven是一个广泛使用的Java项目管理工具,它的配置文件(pom.xml)会引用到"Maven-v3_0_0.xsd"这样的xsd文件,以验证其格式正确性。这表明项目遵循Maven的约定,并且其构建过程是自动化和规范化的。 标签中的"开源...
- **编译器插件**:JiBX提供了Ant任务和Maven插件,可以在编译时生成必要的元数据,用于运行时的绑定操作。 - **运行时绑定**:在运行时,JiBX读取绑定定义,然后在需要的时候将Java对象转换为XML或者将XML数据...
此外,CXF还强调易用性,提供了简洁的API和Maven插件简化集成,与Spring框架的无缝集成也是其一大亮点。 在协议和数据绑定方面,CXF支持SOAP 1.1和1.2,以及WS-I Basic Profile、WS-Security等标准。它能处理WSDL ...
7. **插件支持**:CXF提供了丰富的插件,如Maven插件,方便在Maven构建流程中生成服务客户端和服务端代码,简化开发流程。 8. **测试工具**:CXF提供了测试工具,如CXF TestSupport,可以便捷地对Web服务进行单元...
14. **工具支持**: 如Maven的maven-jaxb2-plugin插件可以帮助自动生成Java类,Eclipse和IntelliJ IDEA等IDE也有集成的XML绑定工具。 综上所述,XML和Java绑定是Java开发中的重要技能,它简化了XML数据的处理,提高...
它支持多种数据绑定技术,如XMLBeans、JiBX、JaxMe和JAXBRI,但不支持WS-Policy。尽管Axis2提供了强大的多语言支持,包括C/C++,但在应用集成和Web应用部署方面可能相对复杂。 相比之下,CXF是一个更全面的SOA...
9. **插件支持**:在Maven和Gradle等构建工具中,CXF提供了相应的插件,方便集成到项目构建流程中,简化服务的部署和运行。 10. **错误处理和调试**:CXF提供了详细的日志记录和异常处理机制,帮助开发者定位和解决...
- **易于使用**:提供了命令行工具和 Maven 插件,简化了服务的生成和部署过程。 在实际应用中,开发者可以通过以下步骤使用 Axis2: 1. **创建服务**:编写服务接口和实现,然后使用 Axis2 工具将它们打包成服务...
7. **插件支持**:CXF兼容Maven和Ant构建工具,通过插件可以轻松地将CXF集成到现有的开发流程中。 8. **国际化与本地化**:CXF支持多语言环境,使得服务能够适应不同的语言和地区。 在"apache-cxf-2.7.4"压缩包中...
4. **数据绑定**:CXF集成了多种数据绑定技术,如JAXB(Java Architecture for XML Binding)用于XML到Java对象的映射,以及 JiBX 和 Aegis 用于自定义数据绑定。 5. **协议栈**:CXF支持多种传输协议,包括HTTP、...
以上 JAR 包可以从 Maven 中央仓库或其他途径获取,然后将其添加到 Eclipse 项目的 Build Path 中。 #### 六、总结 通过以上步骤,我们可以在 Eclipse 3.2.2 版本上成功配置好 Axis2 的开发环境。这样就可以方便地...