快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
择使用 JDOM API,仅为了显示其功能性(并不仅仅因为我是它的合著者之一!)。

最后,必须指出如何将 XML schema 提供给 SchemaMapper 类。通常,可以假设类的生成是脱机完成的(通过静态 main 方法)。仅通过使 main 方法调用非静态方法,还可以从运行时环境中使用类。做了这些决定后,就可以开始勾画类的框架了。

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

时间:2010-12-02

组装 SchemaMapper 类框架

要做的第一件事就是为要生成的代码设置一些基本存储器。必须能够从每个执行映射的 XML schema 生成多个接口和实现。Java HashMap 正好满足要求。键是接口或实现名称以及映射表中的值,该值是将要输出到新 Java 程序文件的实际代码。还需要存储每对接口/实现的属性(属性是在这两种类之间共享的)。这里,我再次使用 HashMap。其中,键是接口名称。但是,由于每个接口可能有多个属性,因此该值是另一个具有属性及其类型的 HashMap。最后,必须存储 XML schema 的名称空间,因为 JDOM 将使用这个名称空间来访问 XML schema 中的结构。所有这些具体信息都足以初步勾画出新类的框架,新类在清单 2 中。

还请注意在清单 2 中已添加了两个需要使用的基本方法:其中一个方法需要使用 XML schema 的 URL 来执行生成(允许它在网络可访问 schema 以及本地 schema 下运行),另一个方法将类输出到指定的目录中。最后,简单的 main 方法将 XML schema 看作一个变量,然后执行生成。

清单 2. SchemaMapper 类的框架

package org.enhydra.xml.binding; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.Iterator; import java.util.List;      // JDOM classes used for document representation import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.Namespace; import org.jdom.NoSuchAttributeException; import org.jdom.NoSuchChildException; import org.jdom.input.SAXBuilder;      /** <p> <code>SchemaMapper</code> handles generation of Java interfaces and classes from an XML schema, essentially allowing data contracts to be set up for the binding of XML instance documents to Java objects. </p> @author Brett McLaughlin / public class SchemaMapper {      /** Storage for code for interfaces */ private Map interfaces; /** Storage for code for implementations */ private Map implementations; /** Properties that accessor/mutators should be created for */ protected Map properties; /** XML Schema Namespace */ private Namespace schemaNamespace; /** XML Schema Namespace URI */ private static final String SCHEMA_NAMESPACE_URI = "http://www.w3.org/1999/xmlSchema";      /** * <p> *Allocate storage and set up defaults. * </p> */ public SchemaMapper() { interfaces = new HashMap(); implementations = new HashMap(); properties = new HashMap(); schemaNamespace = Namespace.getNamespace(SCHEMA_NAMESPACE_URI); }      /** * <p> *This is the "entry point" for generation of Java classes from an XML *Schema. It allows a schema to be supplied, via <code>URL</code>, *and that schema is used for input to gen

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号