Search in sources :

Example 21 with ServerInstance

use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.

the class Tomcat85Configuration method load.

/**
 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
 */
public void load(IPath path, IProgressMonitor monitor) throws CoreException {
    try {
        monitor = ProgressUtil.getMonitorFor(monitor);
        monitor.beginTask(Messages.loadingTask, 7);
        // check for catalina.policy to verify that this is a v5.5 config
        InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
        in.read();
        in.close();
        monitor.worked(1);
        serverFactory = new Factory();
        serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
        server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
        serverInstance = new ServerInstance(server, null, null);
        monitor.worked(1);
        webAppDocument = new WebAppDocument(path.append("web.xml"));
        monitor.worked(1);
        File file = path.append("context.xml").toFile();
        if (file.exists())
            contextDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(file)));
        monitor.worked(1);
        tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
        monitor.worked(1);
        // load policy file
        policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("catalina.policy").toFile()));
        monitor.worked(1);
        // load properties file
        file = path.append("catalina.properties").toFile();
        if (file.exists())
            propertiesFile = TomcatVersionHelper.getFileContents(new FileInputStream(file));
        else
            propertiesFile = null;
        monitor.worked(1);
        if (monitor.isCanceled())
            return;
        monitor.done();
    } catch (Exception e) {
        Trace.trace(Trace.WARNING, "Could not load Tomcat v8.5 configuration from " + path.toOSString() + ": " + e.getMessage());
        throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) InputSource(org.xml.sax.InputSource) CoreException(org.eclipse.core.runtime.CoreException) ByteArrayInputStream(java.io.ByteArrayInputStream) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Factory(org.eclipse.jst.server.tomcat.core.internal.xml.Factory) ServerInstance(org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance) IFile(org.eclipse.core.resources.IFile) File(java.io.File) FileInputStream(java.io.FileInputStream) CoreException(org.eclipse.core.runtime.CoreException)

Example 22 with ServerInstance

use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.

the class Tomcat85Configuration method load.

/**
 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
 */
public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
    try {
        monitor = ProgressUtil.getMonitorFor(monitor);
        monitor.beginTask(Messages.loadingTask, 1200);
        // check for catalina.policy to verify that this is a v4.0 config
        IFile file = folder.getFile("catalina.policy");
        if (!file.exists())
            throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
        // load server.xml
        file = folder.getFile("server.xml");
        InputStream in = file.getContents();
        serverFactory = new Factory();
        serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
        server = (Server) serverFactory.loadDocument(in);
        serverInstance = new ServerInstance(server, null, null);
        monitor.worked(200);
        // load web.xml
        file = folder.getFile("web.xml");
        webAppDocument = new WebAppDocument(file);
        monitor.worked(200);
        // load context.xml
        file = folder.getFile("context.xml");
        if (file.exists()) {
            in = file.getContents();
            contextDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
        } else
            contextDocument = null;
        monitor.worked(200);
        // load tomcat-users.xml
        file = folder.getFile("tomcat-users.xml");
        in = file.getContents();
        tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
        monitor.worked(200);
        // load catalina.policy
        file = folder.getFile("catalina.policy");
        in = file.getContents();
        policyFile = TomcatVersionHelper.getFileContents(in);
        monitor.worked(200);
        // load catalina.properties
        file = folder.getFile("catalina.properties");
        if (file.exists()) {
            in = file.getContents();
            propertiesFile = TomcatVersionHelper.getFileContents(in);
        } else
            propertiesFile = null;
        monitor.worked(200);
        if (monitor.isCanceled())
            throw new Exception("Cancelled");
        monitor.done();
    } catch (Exception e) {
        Trace.trace(Trace.WARNING, "Could not reload Tomcat v8.5 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
        throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) InputSource(org.xml.sax.InputSource) IFile(org.eclipse.core.resources.IFile) CoreException(org.eclipse.core.runtime.CoreException) ByteArrayInputStream(java.io.ByteArrayInputStream) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) Factory(org.eclipse.jst.server.tomcat.core.internal.xml.Factory) ServerInstance(org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance) CoreException(org.eclipse.core.runtime.CoreException)

Example 23 with ServerInstance

use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.

the class TomcatVersionHelper method updateContextsToServeDirectly.

/**
 * Update Contexts to serve web projects directly.
 *
 * @param baseDir directory where the Catalina instance is found
 * @param loader name of the catalina.properties loader to use for global
 * classpath entries
 * @param monitor a progress monitor
 * @return result of update operation
 */
public static IStatus updateContextsToServeDirectly(IPath baseDir, String tomcatVersion, String loader, boolean enableMetaInfResources, IProgressMonitor monitor) {
    IPath confDir = baseDir.append("conf");
    IPath serverXml = confDir.append("server.xml");
    try {
        monitor = ProgressUtil.getMonitorFor(monitor);
        monitor.beginTask(Messages.publishConfigurationTask, 300);
        monitor.subTask(Messages.publishContextConfigTask);
        Factory factory = new Factory();
        factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
        Server publishedServer = (Server) factory.loadDocument(new FileInputStream(serverXml.toFile()));
        ServerInstance publishedInstance = new ServerInstance(publishedServer, null, null);
        monitor.worked(100);
        boolean modified = false;
        boolean isTomcat80 = tomcatVersion.startsWith("8.0");
        boolean isTomcat85 = tomcatVersion.startsWith("8.5");
        boolean isTomcat9 = tomcatVersion.startsWith("9.");
        // care about top-level modules only
        TomcatPublishModuleVisitor visitor;
        if (isTomcat80) {
            visitor = new Tomcat80PublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
        } else if (isTomcat85) {
            visitor = new Tomcat85PublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
        } else if (isTomcat9) {
            visitor = new Tomcat90PublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
        } else {
            visitor = new TomcatPublishModuleVisitor(baseDir, tomcatVersion, publishedInstance, loader, enableMetaInfResources);
        }
        Context[] contexts = publishedInstance.getContexts();
        for (int i = 0; i < contexts.length; i++) {
            String moduleId = contexts[i].getSource();
            if (moduleId != null && moduleId.length() > 0) {
                IModule module = ServerUtil.getModule(moduleId);
                ModuleTraverser.traverse(module, visitor, monitor);
                modified = true;
            }
        }
        if (modified) {
            monitor.subTask(Messages.savingContextConfigTask);
            factory.save(serverXml.toOSString());
        }
        monitor.worked(100);
        if (Trace.isTraceEnabled())
            Trace.trace(Trace.FINER, "Context docBase settings updated in server.xml.");
    } catch (Exception e) {
        Trace.trace(Trace.SEVERE, "Could not modify context configurations to serve directly for Tomcat configuration " + confDir.toOSString() + ": " + e.getMessage());
        return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] { e.getLocalizedMessage() }), e);
    } finally {
        monitor.done();
    }
    return Status.OK_STATUS;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) MultiStatus(org.eclipse.core.runtime.MultiStatus) IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) IModule(org.eclipse.wst.server.core.IModule) IPath(org.eclipse.core.runtime.IPath) Server(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server) Factory(org.eclipse.jst.server.tomcat.core.internal.xml.Factory) FileInputStream(java.io.FileInputStream) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) SAXException(org.xml.sax.SAXException) ServerInstance(org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance)

Example 24 with ServerInstance

use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.

the class TomcatVersionHelper method getRemovedKeptCatalinaContexts.

/**
 * Gets the paths for Contexts that are being removed in the
 * next server publish. Reads the old server.xml to determine
 * what Contexts were previously servered and returns those
 * that are not included in the specified list of modules.
 *
 * @param oldServerInstance for server.xml from previous server publish
 * @param modules list of currently added modules
 * @param removedContextsMap Map to receive removed contexts mapped by path
 * @param keptContextsMap Map to receive kept contexts mapped by path
 */
public static void getRemovedKeptCatalinaContexts(ServerInstance oldServerInstance, List modules, Map<String, Context> removedContextsMap, Map<String, Context> keptContextsMap) {
    // Collect paths of old web modules managed by WTP
    Context[] contexts = oldServerInstance.getContexts();
    if (contexts != null) {
        for (int i = 0; i < contexts.length; i++) {
            String source = contexts[i].getSource();
            if (source != null && source.length() > 0) {
                removedContextsMap.put(contexts[i].getPath(), contexts[i]);
            }
        }
    }
    // Remove paths for web modules that are staying around
    int size = modules.size();
    for (int i = 0; i < size; i++) {
        WebModule module = (WebModule) modules.get(i);
        String modulePath = module.getPath();
        // normalize "/" to ""
        if (modulePath.equals("/"))
            modulePath = "";
        Context context = removedContextsMap.remove(modulePath);
        if (context != null)
            keptContextsMap.put(context.getPath(), context);
    }
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context)

Example 25 with ServerInstance

use of org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance in project webtools.servertools by eclipse.

the class TomcatVersionHelper method localizeConfiguration.

/**
 * If modules are not being deployed to the "webapps" directory, the
 * context for the published modules is updated to contain the
 * corrected docBase.
 *
 * @param baseDir runtime base directory for the server
 * @param deployDir deployment directory for the server
 * @param server server being localized
 * @param monitor a progress monitor
 * @return result of operation
 */
public static IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer server, IProgressMonitor monitor) {
    try {
        if (Trace.isTraceEnabled())
            Trace.trace(Trace.FINER, "Localizing configuration at " + baseDir);
        monitor = ProgressUtil.getMonitorFor(monitor);
        monitor.beginTask(Messages.publishConfigurationTask, 300);
        IPath serverXml = baseDir.append("conf/server.xml");
        Factory factory = new Factory();
        factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
        Server publishedServer = (Server) factory.loadDocument(new FileInputStream(serverXml.toFile()));
        ServerInstance publishedInstance = new ServerInstance(publishedServer, null, null);
        monitor.worked(100);
        if (monitor.isCanceled())
            return Status.CANCEL_STATUS;
        boolean modified = false;
        // Only add root module if running in a test env (i.e. not on the installation)
        boolean addRootWebapp = server.isTestEnvironment();
        // If not deploying to "webapps", context docBase attributes need updating
        // TODO Improve to compare with appBase value instead of hardcoded "webapps"
        boolean deployingToAppBase = "webapps".equals(server.getDeployDirectory());
        Map<String, String> pathMap = new HashMap<String, String>();
        MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishServer, server.getServer().getName()), null);
        Context[] contexts = publishedInstance.getContexts();
        if (contexts != null) {
            for (int i = 0; i < contexts.length; i++) {
                Context context = contexts[i];
                // Normalize path and check for duplicates
                String path = context.getPath();
                if (path != null) {
                    // Save a copy of original in case it's "/"
                    String origPath = path;
                    // Normalize "/" to ""
                    if ("/".equals(path)) {
                        if (Trace.isTraceEnabled())
                            Trace.trace(Trace.FINER, "Context path is being changed from \"/\" to \"\".");
                        path = "";
                        context.setPath(path);
                        modified = true;
                    }
                    // Context paths that are the same or differ only in case are not allowed
                    String lcPath = path.toLowerCase();
                    if (!pathMap.containsKey(lcPath)) {
                        pathMap.put(lcPath, origPath);
                    } else {
                        String otherPath = pathMap.get(lcPath);
                        IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, origPath.equals(otherPath) ? NLS.bind(Messages.errorPublishPathDup, origPath) : NLS.bind(Messages.errorPublishPathConflict, origPath, otherPath));
                        ms.add(s);
                    }
                } else {
                    IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, Messages.errorPublishPathMissing);
                    ms.add(s);
                }
                // TODO Need to add a root context if deploying to webapps but with auto-deploy off
                if (addRootWebapp && "".equals(context.getPath())) {
                    // A default webapp is being deployed, don't add one
                    addRootWebapp = false;
                }
                // If not deploying to appBase, convert to absolute path under deploy dir
                if (!deployingToAppBase) {
                    String source = context.getSource();
                    if (source != null && source.length() > 0) {
                        context.setDocBase(deployDir.append(context.getDocBase()).toOSString());
                        modified = true;
                    }
                }
            }
        }
        // If errors are present, return status
        if (!ms.isOK())
            return ms;
        if (addRootWebapp) {
            // Add a context for the default webapp
            Context rootContext = publishedInstance.createContext(0);
            rootContext.setPath("");
            rootContext.setDocBase(deployDir.append("ROOT").toOSString());
            rootContext.setReloadable("false");
            modified = true;
        }
        monitor.worked(100);
        if (monitor.isCanceled())
            return Status.CANCEL_STATUS;
        if (modified) {
            monitor.subTask(Messages.savingContextConfigTask);
            factory.save(serverXml.toOSString());
        }
        monitor.worked(100);
        if (Trace.isTraceEnabled())
            Trace.trace(Trace.FINER, "Context docBase settings updated in server.xml.");
    } catch (Exception e) {
        Trace.trace(Trace.WARNING, "Could not localize server configuration published to " + baseDir.toOSString() + ": " + e.getMessage());
        return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] { e.getLocalizedMessage() }), e);
    } finally {
        monitor.done();
    }
    return Status.OK_STATUS;
}
Also used : Context(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context) MultiStatus(org.eclipse.core.runtime.MultiStatus) IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) IStatus(org.eclipse.core.runtime.IStatus) IPath(org.eclipse.core.runtime.IPath) Server(org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server) HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Factory(org.eclipse.jst.server.tomcat.core.internal.xml.Factory) MultiStatus(org.eclipse.core.runtime.MultiStatus) FileInputStream(java.io.FileInputStream) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) SAXException(org.xml.sax.SAXException) ServerInstance(org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance)

Aggregations

ServerInstance (org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance)38 IStatus (org.eclipse.core.runtime.IStatus)25 Status (org.eclipse.core.runtime.Status)24 Factory (org.eclipse.jst.server.tomcat.core.internal.xml.Factory)24 FileInputStream (java.io.FileInputStream)23 CoreException (org.eclipse.core.runtime.CoreException)21 InputStream (java.io.InputStream)19 ByteArrayInputStream (java.io.ByteArrayInputStream)18 Context (org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context)18 InputSource (org.xml.sax.InputSource)18 IFile (org.eclipse.core.resources.IFile)17 File (java.io.File)13 Server (org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server)10 IPath (org.eclipse.core.runtime.IPath)9 FileNotFoundException (java.io.FileNotFoundException)6 IOException (java.io.IOException)6 MultiStatus (org.eclipse.core.runtime.MultiStatus)6 Path (org.eclipse.core.runtime.Path)5 SAXException (org.xml.sax.SAXException)5 JarFile (java.util.jar.JarFile)4