这个通用的推送做了很久了,来早就想把它的思路整理一下。终于,想做下来整理的时候很快又发现不知道该怎么说了。
还是硬着头皮往下写吧。
那就先说说castor 吧。由于在我们的推送配置是相对比较复杂的,不管是自己通过DOM或者SAX的调用来实现回事相当麻烦的。比如说我们根据我们的配置xml , 需要定义一些对象如config,task ,source 。。。(都对应我们的xml)。那么config下面是可以有不确定个数的task,task下又可以有不确定个数的source,而source下又可以有不确定个数source。这样在在初始化的时候要做大量的对List的操作。一个字麻烦。
Castor是ExoLab Group下面的一个开放源代码的项目,它主要实现的是O/R映射功能。它主要API和数据接口为:JDO-like, SQL, OQL, JDBC, LDAP, XML, DSML。它支持分布式目录事务处理和时间;提供处理XML、Directory、XADirectory的类库,提供从XML到JAVA类的转换机制。其中最重要的就是其XML映射机制和其独创的Castor JDO的机制了。我们就是使用了castor xml。
XML映射机制
组织(Marshalling)是为内存中的对象生成 XML 表示的过程。与 Java 序列化一样,这种表示需要包含所有依赖的对象:我们的主对象引用的对象、那些对象引用的对象,等等。
解组(Unmarshalling)是与组织相反的过程,在内存中根据 XML 表示构建一个对象(和依赖的对象)。
映射(Mapping)是用于组织和解组的一套规则。 Castor 有内置的规则定义本文的这一部分所描述的缺省映射。
就以,我们的配置文件为例:
xml 代码
- <source id="1" name="website" isTranstion="false" isMuTheard="true" futrueid="ID">
首先 需要定义相应的对象
java 代码
- ublic class SourceConfig extends AbstractSendConfig {
- private static final long serialVersionUID = 3334769084824491180L;
- private boolean isTranstion;
- private boolean isMuTheard;
- private long interval = 0;
- private String futrueid;
-
- public boolean getIsMuTheard() {
- return isMuTheard;
- }
-
- public void setIsMuTheard(boolean isMuTheard) {
- this.isMuTheard = isMuTheard;
- }
-
- public boolean getIsTranstion() {
- return isTranstion;
- }
-
- public void setIsTranstion(boolean isTranstion) {
- this.isTranstion = isTranstion;
- }
-
- public String getFutrueid() {
- return futrueid;
- }
-
- public void setFutrueid(String futrueid) {
- this.futrueid = futrueid;
- }
-
- public long getInterval() {
- return interval;
- }
- public void setInterval(long interval) {
- this.interval = interval;
- }
- }
第二步就是建立相应的map
xml 代码
- <!---->xml version="1.0" encoding="UTF-8"?>
- <!---->
- "http://castor.org/mapping.dtd">
- <mapping>
- <class name="com.ninetowns.spider.sender.SourceConfig" auto-complete="true">
- <field name="id">
- <bind-xml name="id" node="attribute"/>
- field>
- <field name="name">
- <bind-xml name="name" node="attribute"/>
- field>
- <field name="futrueid">
- <bind-xml name="futrueid" node="attribute"/>
- field>
- <field name="isTranstion">
- <bind-xml name="isTranstion" node="attribute"/>
- field>
- <field name="isMuTheard">
- <bind-xml name="isMuTheard" node="attribute"/>
- field>
- <field name="interval">
- <bind-xml name="interval" node="attribute"/>
- field>
- class>
- mapping>
第三部 解组(Unmarshalling)
java 代码
- public class Xml2ObjectUtil {
- public static synchronized Object xml2Object(Class objClass,
- String mapFile, String xmlFile) throws Exception {
- if (objClass == null || xmlFile == null)
- return null;
- URL mapping = null;
- if (mapFile != null && !mapFile.trim().equals(""))
- mapping = objClass.getClassLoader().getResource(mapFile);
- InputStream in = Xml2ObjectUtil.class.getClassLoader()
- .getResourceAsStream(xmlFile);
- return xml2Object(objClass, mapping, in);
- }
-
-
- public static synchronized Object xml2Object(Class objClass, URL mapping,
- InputStream input) throws Exception {
- if (objClass == null || input == null)
- return null;
- if (mapping == null)
- mapping = getDefaultMap(objClass);
-
- ClassDescriptorResolver resolver = getResolver(mapping);
-
- Unmarshaller unmarshaller = new Unmarshaller();
- unmarshaller.setWhitespacePreserve(false);
- unmarshaller.setResolver((XMLClassDescriptorResolver) resolver);
-
- InputStreamReader reader = new InputStreamReader(input);
- return unmarshaller.unmarshal(reader);
- }
- }
最后就是调用了
java 代码
- SourceConfig config = (SourceConfig ) Xml2ObjectUtil.xml2Object(
- SourceConfig.class, “map文件”, “xml文件”);
ok 这样就搞定了一个简单应用。castor还可以支持对象的聚合,还能支持一些基本数据类型同时还可以帮你做验证。castor本身也是给予dom方式访问xml的,它只是简化了我们编写程序的复杂度。
分享到:
相关推荐
<项目介绍> - 四连杆机构的仿真 --m3_1.m: 位置问题求解 --m2_1.m: 速度问题求解 --FourLinkSim.slx: Simlink基于加速度方程的仿真 --FourLinkSim2.slx: Simscape简化模型仿真 --FourLinkSim3.slx: Simscape CAD模型仿真 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
ridge_regression 用于岭回归的python代码(已实现以预测下个月的CO2浓度) 资料可用性 文件 Ridge.py :标准函数和Ridge回归函数window_make.py :使用滑动窗口方法制作大小为p(窗口大小)的时间序列列表。 Final_version.ipynb :使用Co2数据对代码进行实验
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
功能说明: 系统主要分为系统管理员和用户两个部分,系统管理员主要功能包括首页,个人中心,用户管理,节日风俗管理,饮食风俗管理,服饰风俗管理,礼仪风俗管理,信仰风俗管理,建筑风俗管理,我的收藏管理,留言板管理,论坛管理,系统管理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
中国城市温度历史数据(2000-2020)-最新全集.zip
中国土地利用现状遥感监测数据(1km)-最新.zip
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
java资源Google API for Java提取方式是百度网盘分享地址
中国分地区地级市泰尔指数数据集(2000-2019).zip
环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
功能说明: 系统功能实现了首页,房源信息,交流论坛,公告资讯,个人中心,后台管理等功能。系统的后台实现了个人中心,用户管理,房东管理,房源类型管理,房源信息管理,在线咨询管理,预约信息管理,订单信息管理,签订信息管理,申请退租管理,交流论坛,系统管理等功能的添加、删除和修改。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上
yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip
安装包eclipse-jee-neon-3-win32-x86_64提取方式是百度网盘分享地址
PartSegCore_compiled_backend-0.12.0a0-cp36-cp36m-win_amd64.whl.rar
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。
中国各省GDP及农业主要指标数据集(1999-2019).zip
Nginx事件驱动模型深度解析