All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openas2.XMLSession Maven / Gradle / Ivy

Go to download

Open source implementation of the AS2 standard for signed encrypted and compressed document transfer

There is a newer version: 2.10.1
Show newest version
package org.openas2;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Map;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openas2.cert.CertificateFactory;
import org.openas2.cmd.CommandManager;
import org.openas2.cmd.CommandRegistry;
import org.openas2.cmd.processor.BaseCommandProcessor;
import org.openas2.lib.xml.PropertyReplacementFilter;
import org.openas2.logging.LogManager;
import org.openas2.logging.Logger;
import org.openas2.partner.PartnershipFactory;
import org.openas2.processor.Processor;
import org.openas2.processor.ProcessorModule;
import org.openas2.schedule.SchedulerComponent;
import org.openas2.util.Properties;
import org.openas2.util.XMLUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * original author unknown
 * 

* in this release added command registry methods * * @author joseph mcverry */ public class XMLSession extends BaseSession { private static final String EL_PROPERTIES = "properties"; private static final String EL_CERTIFICATES = "certificates"; private static final String EL_CMDPROCESSOR = "commandProcessors"; private static final String EL_PROCESSOR = "processor"; private static final String EL_PARTNERSHIPS = "partnerships"; private static final String EL_COMMANDS = "commands"; private static final String EL_LOGGERS = "loggers"; //private static final String PARAM_BASE_DIRECTORY = "basedir"; private CommandRegistry commandRegistry; private CommandManager cmdManager = new CommandManager(); private String VERSION; private String TITLE; private static final Log LOGGER = LogFactory.getLog(XMLSession.class.getSimpleName()); public XMLSession(String configAbsPath) throws Exception { File configXml = new File(configAbsPath); File configDir = configXml.getParentFile(); FileInputStream configAsStream = new FileInputStream(configXml); setBaseDirectory(configDir.getAbsolutePath()); load(configAsStream); // scheduler should be initializer after all modules addSchedulerComponent(); } private void addSchedulerComponent() throws OpenAS2Exception { SchedulerComponent comp = new SchedulerComponent(); setComponent("scheduler", comp); comp.init(this, Collections.emptyMap()); } protected void load(InputStream in) throws Exception { Document document = XMLUtil.parseXML(in, new PropertyReplacementFilter()); Element root = document.getDocumentElement(); NodeList rootNodes = root.getChildNodes(); Node rootNode; String nodeName; // this is used by all other objects to access global configs and functionality LOGGER.info("Loading configuration..."); for (int i = 0; i < rootNodes.getLength(); i++) { rootNode = rootNodes.item(i); nodeName = rootNode.getNodeName(); // enter the command processing loop if (nodeName.equals(EL_PROPERTIES)) { loadProperties(rootNode); } else if (nodeName.equals(EL_CERTIFICATES)) { loadCertificates(rootNode); } else if (nodeName.equals(EL_PROCESSOR)) { loadProcessor(rootNode); } else if (nodeName.equals(EL_CMDPROCESSOR)) { loadCommandProcessors(rootNode); } else if (nodeName.equals(EL_PARTNERSHIPS)) { loadPartnerships(rootNode); } else if (nodeName.equals(EL_COMMANDS)) { loadCommands(rootNode); } else if (nodeName.equals(EL_LOGGERS)) { loadLoggers(rootNode); } else if (nodeName.equals("#text")) { // do nothing } else if (nodeName.equals("#comment")) { // do nothing } else { throw new OpenAS2Exception("Undefined tag: " + nodeName); } } cmdManager.registerCommands(commandRegistry); } private void loadProperties(Node propNode) { LOGGER.info("Loading properties..."); Map properties = XMLUtil.mapAttributes(propNode, false); // Make key things accessible via static object for things that do not have accesss to session object properties.put(Properties.APP_TITLE_PROP, getAppTitle()); properties.put(Properties.APP_VERSION_PROP, getAppVersion()); Properties.setProperties(properties); } private void loadCertificates(Node rootNode) throws OpenAS2Exception { CertificateFactory certFx = (CertificateFactory) XMLUtil.getComponent( rootNode, this); setComponent(CertificateFactory.COMPID_CERTIFICATE_FACTORY, certFx); } private void loadCommands(Node rootNode) throws OpenAS2Exception { Component component = XMLUtil.getComponent(rootNode, this); commandRegistry = (CommandRegistry) component; } private void loadLoggers(Node rootNode) throws OpenAS2Exception { LOGGER.info("Loading log manager(s)..."); LogManager manager = LogManager.getLogManager(); if (LogManager.isRegisteredWithApache()) { ; // continue } else { // if using the OpenAS2 loggers the log manager must registered with the jvm argument // -Dorg.apache.commons.logging.Log=org.openas2.logging.Log throw new OpenAS2Exception("the OpenAS2 loggers' log manager must be registered with the jvm argument -Dorg.apache.commons.logging.Log=org.openas2.logging.Log"); } NodeList loggers = rootNode.getChildNodes(); Node logger; for (int i = 0; i < loggers.getLength(); i++) { logger = loggers.item(i); if (logger.getNodeName().equals("logger")) { loadLogger(manager, logger); } } } private void loadLogger(LogManager manager, Node loggerNode) throws OpenAS2Exception { Logger logger = (Logger) XMLUtil.getComponent(loggerNode, this); manager.addLogger(logger); } private void loadCommandProcessors(Node rootNode) throws OpenAS2Exception { // get a registry of Command objects, and add Commands for the Session LOGGER.info("Loading command processor(s)..."); NodeList cmdProcessor = rootNode.getChildNodes(); Node processor; for (int i = 0; i < cmdProcessor.getLength(); i++) { processor = cmdProcessor.item(i); if (processor.getNodeName().equals("commandProcessor")) { loadCommandProcessor(cmdManager, processor); } } } private void loadCommandProcessor(CommandManager manager, Node cmdPrcessorNode) throws OpenAS2Exception { BaseCommandProcessor cmdProcesor = (BaseCommandProcessor) XMLUtil .getComponent(cmdPrcessorNode, this); manager.addProcessor(cmdProcesor); setComponent(cmdProcesor.getName(), cmdProcesor); } private void loadPartnerships(Node rootNode) throws OpenAS2Exception { LOGGER.info("Loading partnerships..."); PartnershipFactory partnerFx = (PartnershipFactory) XMLUtil .getComponent(rootNode, this); setComponent(PartnershipFactory.COMPID_PARTNERSHIP_FACTORY, partnerFx); } private void loadProcessor(Node rootNode) throws OpenAS2Exception { Processor proc = (Processor) XMLUtil.getComponent(rootNode, this); setComponent(Processor.COMPID_PROCESSOR, proc); LOGGER.info("Loading processor modules..."); NodeList modules = rootNode.getChildNodes(); Node module; for (int i = 0; i < modules.getLength(); i++) { module = modules.item(i); if (module.getNodeName().equals("module")) { loadProcessorModule(proc, module); } } } private void loadProcessorModule(Processor proc, Node moduleNode) throws OpenAS2Exception { ProcessorModule procmod = (ProcessorModule) XMLUtil.getComponent( moduleNode, this); proc.getModules().add(procmod); } @Nullable private String getManifestAttribValue(@Nonnull String attrib) { Enumeration resEnum; try { resEnum = Thread.currentThread().getContextClassLoader().getResources(JarFile.MANIFEST_NAME); while (resEnum.hasMoreElements()) { try { URL url = (URL) resEnum.nextElement(); if (!url.getPath().contains("openas2")) { continue; } InputStream is = url.openStream(); if (is != null) { Manifest manifest = new Manifest(is); Attributes mainAttribs = manifest.getMainAttributes(); String value = mainAttribs.getValue(attrib); if (value != null) { return value; } } } catch (Exception e) { // Silently ignore wrong manifests on classpath? } } } catch (IOException e1) { // Silently ignore wrong manifests on classpath? } return null; } public String getAppVersion() { if (VERSION == null) { VERSION = getManifestAttribValue("Implementation-Version"); } return VERSION; } public String getAppTitle() { if (TITLE == null) { TITLE = getManifestAttribValue("Implementation-Title") + " v" + getAppVersion(); } return TITLE; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy