快速业务通道

从XML到Java代码的数据绑定之二 从XML数据创建类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
eration. * </p> * * @param schemaURL <code>URL</code> at which XML Schema is located. * @throws <code>IOException</code> - when problems in generation occur. */ public void generateClasses(URL schemaURL) throws IOException {      // Perform generation }      /** * <p> *This will write out the generated classes to the supplied stream. * </p> * * @param directory <code>File</code> to write to (should be a directory). * @throws <code>IOException</code> - when output errors occur. */ public void writeClasses(File dir) throws IOException {      // Perform output to files }      /** * <p> *This provides a static entry point for class generation from *XML Schemas. * </p> * * @param args <code>String[]</code> list of files to parse. */ public static void main(String[] args) { SchemaMapper mapper = new SchemaMapper(); try { for (int i=0; i<args.length; i++) { File file = new File(args[i]); mapper.generateClasses(file.toURL()); mapper.writeClasses(new File(".")); } } catch (FileNotFoundException e) { System.out.println("Could not locate XML Schema: "); e.printStackTrace(); } catch (IOException e) { System.out.println("Java class generation failed: "); e.printStackTrace(); } } }

In 清单 2中,可以看到对于每个作为自变量传递的 XML schema,main 方法都调用生成过程。首先,方法会生成类。将文件名转换为 URL,并传递到 generateClasses(URL schemaURL) 。然后,通过 writeClasses(File dir) 方法将类写到当前目录中(转换成 Java File: new File("."))。

任何其它 Java 类都可以在运行时进行相同的调用,并生成类。例如,一个定制类装入器也许能发现需要打包,确定仍要生成的接口和实现,并使用 SchemaMapper 类来执行该任务。所有这一切都在运行时完成。因为 generateClasses() 方法需要一个 URL,所以在网络上使用这个类非常简单。例如,可以使用它来请求从 HTTP 上公开可用的 XML schema 生成类。

由于对如何使用类做了尽量少的假设,因此它是一个普通类;程序可以同时在本地和远程使用它。并且这个类可以当作一组 Java 语言和 XML 实用程序类的一部分,而不是必须以某种特殊形式使用的专用类。这种可重用性原则对 XML 特别关键,因为在不同系统上进行网络访问和通信是 XML 的基本前提。

从XML到Java代码的数据绑定之二 从XML数据创建类(3)

时间:2010-12-02

生成类

构建好类的框架后,就可以添加类的主体了。

我已经提到过生成过程具有递归性质。请记住这一点,需要填充 generateClasses() 方法才能开始。可以使用 JDOM 读取 XML schema,然后从 schema 中抽取每个 complexType 元素。对于这些元素中的每一个,如清单 3 所示,递归进程从 handleComplexType() 调用处开始(以后将进一步讨论)。

清单 3. The generateClasses() 方法

public void generateClasses(URL schemaURL) throws IOException {       /** * Create builder to generate JDOM representation of XML Schema, * without validation and using Apache Xerces. */ SAXBuilder builder = new SAXBuilder(); try { Document schemaDoc = builder.build(schemaURL);       // Handle complex types List complexTypes = schemaDoc.getRootElement() .getChildren(&quo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号