加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:08:22 所属栏目:百科 来源:网络整理
导读:1. 在上一篇文章分析了guzz初始化的大体流程,这里继续分析,主要分析在initFromMainConfig的方法中解析guzz.xml的过程 2. 首先在initFromMainConfig中找到下面的代码: GuzzConfigFileBuilder builder = GuzzConfigFileBuilder.build(this,config,"UTF-8")

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文件的解析

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读