`
确实比较男
  • 浏览: 114347 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Guzz源码分析(二) guzz解析guzz.xml

    博客分类:
  • Guzz
阅读更多

1. 在上一篇文章分析了guzz初始化的大体流程,这里继续分析,主要分析在initFromMainConfig的方法中解析guzz.xml的过程

2. 首先在initFromMainConfig中找到下面的代码:

 

GuzzConfigFileBuilder builder = GuzzConfigFileBuilder.build(this, config, "UTF-8") ;
	if(log.isInfoEnabled()){
		log.info("Loading guzz config file:" + config) ;
}

这里出现了一个类GuzzConfigFileBuilder,这也是一个重要的类,后面也会使用到,这里只看build方法,传入了config(就是guzz.xml)文件,一路跟踪找到:

 

protected void setupMainConfigDocument(GuzzContext gf, Resource r, String encoding) throws DocumentException, IOException, SAXException{
		rootDoc = loadFullConfigFile(r, encoding).getRootElement() ;
		
    	this.mainConfigResource = r ;
	}

出现了loadFullConfigFile方法,返回了一个guzz.xml的document对象.

3. 跟踪进入到loadFullConfigFile方法中:使用了dom4j的SAXReader来解析的guzz.xml,

final Element root = document.getRootElement();
List list = document.selectNodes("//import");

获取到根节点,寻找import节点,把找的到import放入到list中,然后进入for循环

 for(int i = 0 ; i < list.size() ; i++){
        	Element  n = (Element ) list.get(i) ;
        	
        	String file = n.attribute("resource").getValue() ;
        	
        	//load included xml file.
        	FileResource fr = new FileResource(resource, file) ;
        	Document includedDoc = null ;
        	
        	try{
        		includedDoc = loadFullConfigFile(fr, encoding) ;
        	}finally{
        		CloseUtil.close(fr) ;
        	}
        	
        	List content = root.content() ;
        	int indexOfPos = content.indexOf(n) ;
        	
        	content.remove(indexOfPos) ;
        	
        	//appends included docs
        	Element ie = includedDoc.getRootElement() ;        	
        	List ie_children = ie.content() ;
        	
        	for(int k = ie_children.size() - 1 ; k >=0  ; k--){
        		content.add(indexOfPos, ie_children.get(k)) ;
        	}
        }

有出现了loadFullConfigFile方法,也就是递归的解析了使用import导入进来的文件,然后把文件加入到document后面,最好返回整个xml文档对象,保存到了rootDoc

4. 到此guzz完成guzz.xml文件的解析


分享到:
评论

相关推荐

    guzz: a empty sample project build20110323.zip

    通过分析和运行这个项目,我们可以深入理解Guzz的核心概念和使用方法。 首先,Guzz的设计目标是提供一种灵活、高效的解决方案,用于处理实时或批处理的数据流任务。它采用了面向任务编程模型,使得开发者可以专注于...

    guzz的jar包

    guzz的jar包,工程下直接考过来的,可以直接使用

    Guzz-crx插件

    【Guzz-crx插件】是一款专为Guzz平台设计的屏幕共享扩展程序,它使得用户能够在使用Guzz.io服务时轻松实现桌面屏幕共享功能。这一功能对于远程协作、在线会议、教育辅导以及团队沟通等场景具有极大的价值,极大地...

    guzz开发jar

    guzz是一套用来进行快速开发和高性能网站设计的java框架,通过ORM、多数据源数据管理、以及通用数据处理,为系统在数据层的设计提供一站式解决方案。用于替代或者补充hibernate或ibatis,并提供更多的大型系统架构...

    guzz的「Guzz」-crx插件

    为Guzz启用屏幕共享。 此扩展程序允许www.guzz.io用户共享桌面屏幕 支持语言:English

    InstallAnywhere 2008破解与自定义PlugIn陷阱经验分享

    NULL 博文链接:https://guzz.iteye.com/blog/256235

    轻松将一张大表分切到不同的机器中

    NULL 博文链接:https://guzz.iteye.com/blog/883225

    bicq代码

    为了深入了解,你可以访问提供的博文链接(https://guzz.iteye.com/blog/507276),在那里可能会找到关于BICQ的详细解释、使用示例和开发背景等信息。同时,查看压缩包中的文件(BICQ)可以获取实际的源代码,进一步...

    JAVA面试问题及标准答案.docx

    ORM通过元数据(例如XML或注解)将对象模型映射到数据库关系模型,使得程序可以直接操作对象,而无需关注底层数据库的细节。例如,Hibernate是一个流行的Java ORM框架,它可以自动将对象持久化到数据库中,或将...

    Java面试题全集(下)

    在Java中,这些元数据可以通过XML文件或注解的方式进行配置。 2. 持久层设计:持久层设计的主要目的是将内存中的数据持久化到外部存储设备中,比如关系型数据库、文件系统或消息队列等。持久层的设计目标包括数据...

    JAVA面试问题及答案.docx

    ORM技术通过XML或注解来定义这种映射关系,使得Java对象可以直接被持久化到数据库,或者数据库中的记录可以被转化为Java对象。Hibernate是一个流行的Java ORM框架,它提供了SessionFactory和Session两个核心概念。...

    java框架面试题

    通常情况下,这种机制涉及元数据的定义,比如XML配置文件或注解,用来描述对象和数据库表之间的映射关系。当数据需要保存或从数据库中检索时,ORM工具会根据定义的映射关系自动生成相应的SQL语句,执行后返回对象。 ...

    Laravel中使用阿里云OSS Composer包分享

    阿里云提供了基于命名空间的 V2 版 SDK,但是文档不是很完整,使用门槛比较高,于是我封装了一个 Composer 包:https://github.com/johnlui/AliyunOSS 安装 将以下内容增加到 composer.json: 复制代码 代码如下: ...

    哀悼日变灰操作

    根据给定文件的信息,我们可以提炼出与“哀悼日变灰操作”相关的IT知识点,但首先需要澄清的是,文件内容似乎包含了一些不相关的代码片段和文档,这些内容涉及一个名为"Guzz"的全栈数据层解决方案框架,以及一系列与...

    Java面试题全集.docx

    - **工作原理**:ORM通过元数据(如XML或注解)来描述对象和数据库之间的映射关系。当对象的状态发生改变时,ORM框架会负责更新数据库,反之亦然。 - **优点**:提高开发效率、降低代码复杂度、增强代码可维护性。 -...

    java框架方面面试题

    它通过定义元数据来描述对象和数据库之间的映射关系,在Java中,这样的元数据可以是XML格式或者使用注解方式。ORM技术允许开发者以面向对象的方式来操作数据库,从而将对象数据自动持久化到数据库中,或者将数据库中...

    php-sdk:用于连接到MultiSafepay REST API的默认PHP库

    MultiSafepay PHP SDK关于...如果您没有安装任何客户端实现,请使用以下命令: composer require guzzlehttp/guzzle如果您没有安装任何工厂实现,请使用以下命令: composer require http-interop/http-factory-guzz

    bof:人类的HTTP客户端

    为什么?... 它使最经典的用例(例如下载文件,与JSON API交互或提交表单)尽可能地简单。 由于基于 ,因此可以直接使用Guzzle的方法解决更高级的用例。 总结起来,Bof: 是用户友好的避免使用魔术字符串... 这是Bof与Guzz

Global site tag (gtag.js) - Google Analytics