deploymentdescriptorwriter.java

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

JAVA
280
字号
/* * 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.xml;import java.io.IOException;import java.util.Collections;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.xml.namespace.QName;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.w3c.dom.Attr;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.xml.sax.SAXException;import org.jbpm.JbpmConfiguration;import org.jbpm.bpel.deploy.DeploymentDescriptor;import org.jbpm.bpel.deploy.MyRoleDescriptor;import org.jbpm.bpel.deploy.PartnerLinkDescriptor;import org.jbpm.bpel.deploy.PartnerRoleDescriptor;import org.jbpm.bpel.deploy.ScopeDescriptor;import org.jbpm.bpel.deploy.PartnerRoleDescriptor.InitiateMode;import org.jbpm.bpel.endpointref.EndpointReference;import org.jbpm.bpel.integration.catalog.CompositeCatalog;import org.jbpm.bpel.integration.catalog.ServiceCatalog;import org.jbpm.bpel.xml.util.XmlUtil;import org.jbpm.util.ClassLoaderUtil;/** * Converts a deployment descriptor {@linkplain DeploymentDescriptor object} to XML format. * @author Alejandro Guizar * @version $Revision: 1.1 $ $Date: 2007/10/13 02:53:27 $ */public class DeploymentDescriptorWriter {  public static final String RESOURCE_CATALOG_WRITERS = "resource.catalog.writers";  private static final Log log = LogFactory.getLog(DeploymentDescriptorWriter.class);  private static final Map catalogWriters = readCatalogWriters();  private static final DeploymentDescriptorWriter instance = new DeploymentDescriptorWriter();  protected DeploymentDescriptorWriter() {  }  public void write(DeploymentDescriptor deploymentDescriptor, Element descriptorElem) {    // global scope attributes    writeScope(deploymentDescriptor, descriptorElem);    // target namespace    descriptorElem.setAttribute(BpelConstants.ATTR_TARGET_NAMESPACE,        deploymentDescriptor.getTargetNamespace());    // version    Integer version = deploymentDescriptor.getVersion();    if (version != null)      descriptorElem.setAttribute(BpelConstants.ATTR_VERSION, version.toString());    // service catalogs    ServiceCatalog serviceCatalog = deploymentDescriptor.getServiceCatalog();    if (serviceCatalog != null)      writeServiceCatalogs(serviceCatalog, descriptorElem);  }  protected void writeScope(ScopeDescriptor scope, Element scopeElem) {    // name - there can be unnamed scope descriptors    String name = scope.getName();    if (name != null)      scopeElem.setAttribute(BpelConstants.ATTR_NAME, name);    // partner links    Map partnerLinks = scope.getPartnerLinks();    if (!partnerLinks.isEmpty())      writePartnerLinks(partnerLinks, scopeElem);    // inner scopes    List scopes = scope.getScopes();    if (!scopes.isEmpty())      writeScopes(scopes, scopeElem);  }  protected void writePartnerLinks(Map partnerLinks, Element scopeElem) {    Element partnerLinksElem = scopeElem.getOwnerDocument().createElementNS(        BpelConstants.NS_DEPLOYMENT_DESCRIPTOR, BpelConstants.ELEM_PARTNER_LINKS);    scopeElem.appendChild(partnerLinksElem);    for (Iterator i = partnerLinks.values().iterator(); i.hasNext();)      writePartnerLink((PartnerLinkDescriptor) i.next(), partnerLinksElem);  }  protected void writePartnerLink(PartnerLinkDescriptor partnerLink, Element partnerLinksElem) {    Element partnerLinkElem = partnerLinksElem.getOwnerDocument().createElementNS(        BpelConstants.NS_DEPLOYMENT_DESCRIPTOR, BpelConstants.ELEM_PARTNER_LINK);    partnerLinksElem.appendChild(partnerLinkElem);    // name    partnerLinkElem.setAttribute(BpelConstants.ATTR_NAME, partnerLink.getName());    // partner role    PartnerRoleDescriptor partnerRole = partnerLink.getPartnerRole();    if (partnerRole != null)      writePartnerRole(partnerRole, partnerLinkElem);    // my role    MyRoleDescriptor myRole = partnerLink.getMyRole();    if (myRole != null)      writeMyRole(myRole, partnerLinkElem);  }  protected void writePartnerRole(PartnerRoleDescriptor partnerRole, Element partnerLinkElem) {    Element partnerRoleElem = partnerLinkElem.getOwnerDocument().createElementNS(        BpelConstants.NS_DEPLOYMENT_DESCRIPTOR, BpelConstants.ELEM_PARTNER_ROLE);    partnerLinkElem.appendChild(partnerRoleElem);    // initiate    InitiateMode initiateMode = partnerRole.getInitiateMode();    if (initiateMode != null)      partnerRoleElem.setAttribute(BpelConstants.ATTR_INITIATE, initiateMode.getName());    // service reference    EndpointReference serviceRef = partnerRole.getEndpointReference();    if (serviceRef != null) {      Element referenceElem = partnerRoleElem.getOwnerDocument().createElementNS(          BpelConstants.NS_SERVICE_REF, BpelConstants.ELEM_SERVICE_REF);      partnerRoleElem.appendChild(referenceElem);      serviceRef.writeServiceRef(referenceElem);    }  }  protected void writeMyRole(MyRoleDescriptor myRole, Element partnerLinkElem) {    Element myRoleElem = partnerLinkElem.getOwnerDocument().createElementNS(        BpelConstants.NS_DEPLOYMENT_DESCRIPTOR, BpelConstants.ELEM_MY_ROLE);    partnerLinkElem.appendChild(myRoleElem);    // partner link handle    String handle = myRole.getHandle();    if (handle != null)      myRoleElem.setAttribute(BpelConstants.ATTR_HANDLE, handle);    // service    QName service = myRole.getService();    if (service != null) {      Attr serviceAttr = myRoleElem.getOwnerDocument().createAttribute(BpelConstants.ATTR_SERVICE);      myRoleElem.setAttributeNode(serviceAttr);      XmlUtil.setQNameValue(serviceAttr, service);    }    // port    String port = myRole.getPort();    if (port != null)      myRoleElem.setAttribute(BpelConstants.ATTR_PORT, port);  }  protected void writeScopes(List scopes, Element scopeElem) {    Document descriptorDoc = scopeElem.getOwnerDocument();    Element scopesElem = descriptorDoc.createElementNS(BpelConstants.NS_DEPLOYMENT_DESCRIPTOR,        BpelConstants.ELEM_SCOPES);    scopeElem.appendChild(scopesElem);    for (int i = 0, n = scopes.size(); i < n; i++) {      scopeElem = descriptorDoc.createElementNS(BpelConstants.NS_DEPLOYMENT_DESCRIPTOR,          BpelConstants.ELEM_SCOPE);      scopesElem.appendChild(scopeElem);      writeScope((ScopeDescriptor) scopes.get(i), scopeElem);    }  }  protected void writeServiceCatalogs(ServiceCatalog catalog, Element descriptorElem) {    Element catalogsElem = descriptorElem.getOwnerDocument().createElementNS(        BpelConstants.NS_DEPLOYMENT_DESCRIPTOR, BpelConstants.ELEM_SERVICE_CATALOGS);    descriptorElem.appendChild(catalogsElem);    if (catalog instanceof CompositeCatalog) {      List catalogs = ((CompositeCatalog) catalog).getCatalogs();      for (int i = 0, n = catalogs.size(); i < n; i++) {        ServiceCatalog leafCatalog = (ServiceCatalog) catalogs.get(i);        writeCatalog(leafCatalog, catalogsElem);      }    }    else      writeCatalog(catalog, catalogsElem);  }  private void writeCatalog(ServiceCatalog catalog, Element catalogsElem) {    ServiceCatalogWriter catalogWriter = getCatalogWriter(catalog.getClass());    if (catalogWriter != null)      catalogWriter.write(catalog, catalogsElem);    else      log.warn("unrecognized service catalog: " + catalog);  }  public static DeploymentDescriptorWriter getInstance() {    return instance;  }  protected static ServiceCatalogWriter getCatalogWriter(Class catalogClass) {    return (ServiceCatalogWriter) catalogWriters.get(catalogClass);  }  private static Map readCatalogWriters() {    // get catalog writers resource    String resource = JbpmConfiguration.Configs.getString(RESOURCE_CATALOG_WRITERS);    // parse catalog writers document    Element writersElem;    try {      // parse xml document      writersElem = XmlUtil.parseResource(resource);    }    catch (SAXException e) {      log.error("catalog writers document contains invalid xml: " + resource, e);      return Collections.EMPTY_MAP;    }    catch (IOException e) {      log.error("could not read catalog writers document: " + resource, e);      return Collections.EMPTY_MAP;    }    // walk through catalogWriter elements    HashMap catalogWriters = new HashMap();    for (Iterator i = XmlUtil.getElements(writersElem, null, "catalogWriter"); i.hasNext();) {      Element writerElem = (Element) i.next();      // load catalog class      String catalogClassName = writerElem.getAttribute("catalog");      Class catalogClass = ClassLoaderUtil.loadClass(catalogClassName);      // load writer class      String writerClassName = writerElem.getAttribute("class");      Class writerClass = ClassLoaderUtil.loadClass(writerClassName);      // validate writer class      if (!ServiceCatalogWriter.class.isAssignableFrom(writerClass)) {        log.warn("not a catalog writer: " + writerClassName);        continue;      }      try {        // instantiate writer        ServiceCatalogWriter writer = (ServiceCatalogWriter) writerClass.newInstance();        // register writer instance        catalogWriters.put(catalogClass, writer);        log.debug("registered catalog writer: catalog="            + catalogClassName            + ", class="            + writerClassName);      }      catch (InstantiationException e) {        log.warn("writer class not instantiable: " + writerClassName, e);      }      catch (IllegalAccessException e) {        log.warn("writer class or constructor not public: " + writerClassName, e);      }    }    return catalogWriters;  }}

⌨️ 快捷键说明

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