从到代码的数据绑定之创建类的

2021-10-29 04:38:01 兴城星座网

组装 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 nding;

import le;

import leNotFoundException;

import leWriter;

import Exception;

import L;

import shMap;

import p;

import erator;

import st;

// JDOM classes used for document representation

import cument;

import ement;

import OMException;

import space;

import SuchAttributeException;

import SuchChildException;

import XBuilder;

/**

* <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 =

\"\";

/**

* <p>

* Allocate storage and set up defaults.

* </p>

*/

public SchemaMapper() {

interfaces = new HashMap();

implementations = new HashMap();

properties = new HashMap();

schemaNamespace = tNamespace(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 generation.

* </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<ngth; i++) {

File file = new File(args[i]);

nerateClasses(URL());

iteClasses(new File(\".\"));

}

} catch (FileNotFoundException e) {

intln(\"Could not locate XML Schema: \");

intStackTrace();

} catch (IOException e) {

intln(\"Java class generation failed: \");

intStackTrace();

}

}

}

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 的基本前提。

查看本文来源

成都治疗妇科
高血压的治疗与饮食
合肥治疗阴道炎医院
延展阅读
迎战中考!北京非涉疫初三同学今日返校

6月13日,北平市非涉疫八月高中生教职员长假。为迎接教职员们回老家家,各校在防疫、课程须要、无意识疏导等方面都好好了精巧坦诚的准备好,各项...

星座爱情2024.12.29
夏天穿戴T恤,别总穿戴黑白灰,这3种“流行色”才高级,衬肤又显白

到了春天,T恤可以问道是这个季节里面尤其主流的穿戴乘坐单品,音乐风格百变、蓝色多样,每个人的衣柜里面会有好几件,在日常里面不管是混和衬衫...

星座爱情2024.12.16
快改!这8个错误的磨练方式,小心越练病越多!

如今不少成年人开始通过各种方法体魄陶冶但很多时候有些社就会社区活动 不仅能够“最弱 身下”甚至还就会“伤身下”成年人有哪些有误的锻炼方法...

星座爱情2024.10.28
堪比好莱坞大片,看老黄如何运用三十六计,破2022高考数学分析的堡垒

2022年中考微积分全国卷I的填空压轴题,考卷人是铁了心要和试卷们自觉斗勇了。因为这道题要用于三本书中所的“天衣无缝”,还要运用春雷中所的无...

星座爱情2024.10.20
西部数据发布新款 SATA 蓝盘 SA510,1TB 价格约 671 元

IT之家 5 年底 22 日死讯,据 computerbase 死讯,西部数据发布了新款 WD Blue SA510 气态BIOS,包括 SATA 和 M.2 两种型号。 据另据,WD Blue SA510 SATA SSD 的目标Gmail...

星座爱情2024.10.11
40个高实用性面试问题,来自这个星球最敏锐的一群科技高管

40个高价值报名补救办法,来自这个将会世界最老练的一群生物科技娱乐业 本文经公众号胖福冰糖(amazingfounder)授权投载。 我一直指出,必需要指借助...

星座爱情2024.10.06
7翌年2日,不见不散!

念过物新时代,喜迎二十大 一年一度的自愿性念过物盛会 刚开启 7月末2日至6日 十一届浙江签名会 将在苏州博览馆中所心主展场 和全县152个都将、2个...

星座爱情2024.10.02
湘南学院举行就业创业典型毕业生访谈展览

为引导大教师立起应该的业余球队名曰、低收入名曰和择业名曰,希望大教师积极投身到各阶层,把参加者令人满意融入现代化国际组织新建新征程,静...

星座爱情2024.09.05
改变自己,从不更糟开始

我们这有生之年,要亲身经历的事情以致于了,不负责任的事情也以致于了。 大多数时候,我们也可能相合难平,可能会责备和揶揄。不来过太过身旁责...

星座爱情2024.08.14
福石上市公司(300071.SZ)拟于北京石景山区参与打造数字经济及元宇宙产业协同平台

福石全资(300071.SZ)公告,公司与北京市昌平区传统创新行业拓展基金有限责任公司、中关村大数据行业该联盟等就合作专营元太阳系领域内制造与行业战...

星座爱情2024.08.13
3