JBPM4.4源代码导读二(JBPM配置文件装配全过程)

本文详细描述JBPM4.4配置文件解析器
两个核心类:
Parser(解析器),有ConfigurationParser,BingParser等子类实现
Parse (运行时解析器助手,为解析器在运行时提供资源)
由于JBPM的xml文件中套xml文件,所有需要递归解析,最终会把解析后的资源信息存放到Bindings类中;

典型代码:
ConfigurationParser.getInstance()
      .createParse()//转到运行时的Parse
      .contextStackPush(this)
      .setStreamSource(streamSource)
      .execute()
      .checkErrors("jbpm configuration " + streamSource);
这段代码中需要特别注意的是,createParse()方法中会new Parse(this);
在构造运行时Parse类的时候,传入的this是指当前调用方法的ConfigurationParser类;从而在调用运行时Parse类的execute方法时,执行的是ConfigurationParser类的parseDocument方法,并非是其父类Parse的parseDocument方法;同理,如果通过BingParser类调用方法的话,最终解析xml的具体操作就会在BingParser类中执行。

递归解析代码:
for (Element importElement : XmlUtil.elements(documentElement, "import")) {
        if (importElement.hasAttribute("resource")) {
          String resource = importElement.getAttribute("resource");//jbpm.default.cfg.xml
          //根据resource 再次解析
          Parse importParse = createParse()
            .setResource(resource)
            .contextStackPush(configuration)
            .propagateContexMap(parse)
            .execute();
         
          parse.addProblems(importParse.getProblems());
        }
      }

我们在自己的项目中,需要解析xml文件的时候,也推荐使用这种方式;
我们可以在自己的类中依赖Parser解析器,添加如下代码,就可以获取一个xml文件的document对象,
private static Parser parser = new Parser();
//最好声明为static状态,只有声明为static状态,才能保证线程安全
Document document = parser.createParse()
.setResource("*.xml")
.execute()
.getDocument();
//待续。。。。。。越来越有意思了。。。。。


你可能感兴趣的:(xml,jbpm)