genericarchiveparser.java

来自「ejb3 java session bean」· Java 代码 · 共 139 行

JAVA
139
字号
/* * JBoss, Home of Professional Open Source * Copyright 2005, JBoss Inc., and individual contributors as indicated * by the @authors tag. * * This is free software; you can redistribute it and/or modify it * under the terms of the JBPM BPEL PUBLIC LICENSE AGREEMENT as * published by JBoss Inc.; either version 1.0 of the License, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */package org.jbpm.bpel.par;import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.w3c.dom.Element;import org.xml.sax.SAXException;import org.jbpm.JbpmConfiguration;import org.jbpm.bpel.xml.BpelParseException;import org.jbpm.bpel.xml.util.XmlUtil;import org.jbpm.graph.def.ProcessDefinition;import org.jbpm.jpdl.JpdlException;import org.jbpm.jpdl.par.ConfigurableParser;import org.jbpm.jpdl.par.ProcessArchive;import org.jbpm.jpdl.par.ProcessArchiveParser;import org.jbpm.jpdl.xml.Problem;import org.jbpm.util.ClassLoaderUtil;/** * @author Alejandro Guizar * @version $Revision: 1.1 $ $Date: 2007/03/03 11:11:10 $ */public class GenericArchiveParser implements ProcessArchiveParser {  private static final Log log = LogFactory.getLog(GenericArchiveParser.class);  private static List jpdlArchiveParsers = readProcessArchiveParsers("resource.jpdl.parsers");  private static List bpelArchiveParsers = readProcessArchiveParsers("resource.bpel.parsers");  private static final long serialVersionUID = 1L;  public ProcessDefinition readFromArchive(ProcessArchive archive,      ProcessDefinition definition) {    if (archive.getEntry("processdefinition.xml") == null) {      // bpel deployment      definition = callProcessArchiveParsers(bpelArchiveParsers, archive,          definition);      List problems = archive.getProblems();      if (Problem.containsProblemsOfLevel(problems, Problem.LEVEL_ERROR))        throw new BpelParseException(problems);    }    else {      // jpdl deployment      definition = callProcessArchiveParsers(jpdlArchiveParsers, archive,          definition);      List problems = archive.getProblems();      if (Problem.containsProblemsOfLevel(problems, Problem.LEVEL_ERROR))        throw new JpdlException(problems);    }    return definition;  }  public static List readProcessArchiveParsers(String objectName) {    // get parsers resource setting    String resource = JbpmConfiguration.Configs.getString(objectName);    // parse parsers document    Element parsersElem;    try {      parsersElem = XmlUtil.parseResource(resource);    }    catch (SAXException e) {      log.error("parsers document contains invalid xml: " + resource, e);      return Collections.EMPTY_LIST;    }    catch (IOException e) {      log.error("could not read parsers document: " + resource, e);      return Collections.EMPTY_LIST;    }    // walk through parser elements    ArrayList processArchiveParsers = new ArrayList();    Iterator parserElemIt = XmlUtil.getElements(parsersElem, null, "parser");    while (parserElemIt.hasNext()) {      Element parserElem = (Element) parserElemIt.next();      // load parser class      String parserClassName = parserElem.getAttribute("class");      Class parserClass = ClassLoaderUtil.loadClass(parserClassName);      if (!ProcessArchiveParser.class.isAssignableFrom(parserClass)) {        log.warn("not a process archive parser: " + parserClass);        continue;      }      try {        // instantiate parser        ProcessArchiveParser processArchiveParser = (ProcessArchiveParser) parserClass.newInstance();        // let parser read its settings if it is configurable        if (processArchiveParser instanceof ConfigurableParser)          ((ConfigurableParser) processArchiveParser).configure(parserElem);        // register archive parser        processArchiveParsers.add(processArchiveParser);        log.debug("registered archive parser: " + parserClassName);      }      catch (InstantiationException e) {        log.warn("parser class not instantiable: " + parserClassName, e);      }      catch (IllegalAccessException e) {        log.warn("parser class or constructor not public: " + parserClassName,            e);      }    }    return processArchiveParsers;  }  public static ProcessDefinition callProcessArchiveParsers(      List archiveParsers, ProcessArchive archive, ProcessDefinition definition) {    Iterator archiveParsersIt = archiveParsers.iterator();    while (archiveParsersIt.hasNext()) {      ProcessArchiveParser archiveParser = (ProcessArchiveParser) archiveParsersIt.next();      definition = archiveParser.readFromArchive(archive, definition);    }    return definition;  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?