Search in sources :

Example 1 with PatternMatcher

use of org.eclipse.jetty.util.PatternMatcher in project jetty.project by eclipse.

the class AntWebInfConfiguration method preConfigure.

@Override
public void preConfigure(final WebAppContext context) throws Exception {
    //Make a temp directory for the webapp if one is not already set
    resolveTempDirectory(context);
    //Extract webapp if necessary
    unpack(context);
    //Apply an initial ordering to the jars which governs which will be scanned for META-INF
    //info and annotations. The ordering is based on inclusion patterns.       
    String tmp = (String) context.getAttribute(WEBINF_JAR_PATTERN);
    Pattern webInfPattern = (tmp == null ? null : Pattern.compile(tmp));
    tmp = (String) context.getAttribute(CONTAINER_JAR_PATTERN);
    Pattern containerPattern = (tmp == null ? null : Pattern.compile(tmp));
    //Apply ordering to container jars - if no pattern is specified, we won't
    //match any of the container jars
    PatternMatcher containerJarNameMatcher = new PatternMatcher() {

        public void matched(URI uri) throws Exception {
            context.getMetaData().addContainerResource(Resource.newResource(uri));
        }
    };
    ClassLoader loader = context.getClassLoader();
    if (loader != null) {
        loader = loader.getParent();
        if (loader != null) {
            URI[] containerUris = null;
            if (loader instanceof URLClassLoader) {
                URL[] urls = ((URLClassLoader) loader).getURLs();
                if (urls != null) {
                    containerUris = new URI[urls.length];
                    int i = 0;
                    for (URL u : urls) {
                        try {
                            containerUris[i] = u.toURI();
                        } catch (URISyntaxException e) {
                            containerUris[i] = new URI(u.toString().replaceAll(" ", "%20"));
                        }
                        i++;
                    }
                }
            } else if (loader instanceof AntClassLoader) {
                AntClassLoader antLoader = (AntClassLoader) loader;
                String[] paths = antLoader.getClasspath().split(new String(new char[] { File.pathSeparatorChar }));
                if (paths != null) {
                    containerUris = new URI[paths.length];
                    int i = 0;
                    for (String p : paths) {
                        File f = new File(p);
                        containerUris[i] = f.toURI();
                        i++;
                    }
                }
            }
            containerJarNameMatcher.match(containerPattern, containerUris, false);
        }
    }
    //Apply ordering to WEB-INF/lib jars
    PatternMatcher webInfJarNameMatcher = new PatternMatcher() {

        @Override
        public void matched(URI uri) throws Exception {
            context.getMetaData().addWebInfJar(Resource.newResource(uri));
        }
    };
    List<Resource> jars = findJars(context);
    //Convert to uris for matching
    URI[] uris = null;
    if (jars != null) {
        uris = new URI[jars.size()];
        int i = 0;
        for (Resource r : jars) {
            uris[i++] = r.getURI();
        }
    }
    //null is inclusive, no pattern == all jars match 
    webInfJarNameMatcher.match(webInfPattern, uris, true);
    //No pattern to appy to classes, just add to metadata
    context.getMetaData().setWebInfClassesDirs(findClassDirs(context));
}
Also used : Pattern(java.util.regex.Pattern) Resource(org.eclipse.jetty.util.resource.Resource) AntClassLoader(org.apache.tools.ant.AntClassLoader) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) URL(java.net.URL) URLClassLoader(java.net.URLClassLoader) WebAppClassLoader(org.eclipse.jetty.webapp.WebAppClassLoader) AntClassLoader(org.apache.tools.ant.AntClassLoader) URLClassLoader(java.net.URLClassLoader) PatternMatcher(org.eclipse.jetty.util.PatternMatcher) File(java.io.File)

Example 2 with PatternMatcher

use of org.eclipse.jetty.util.PatternMatcher in project jetty.project by eclipse.

the class WebInfConfiguration method preConfigure.

@Override
public void preConfigure(final WebAppContext context) throws Exception {
    //Make a temp directory for the webapp if one is not already set
    resolveTempDirectory(context);
    //Extract webapp if necessary
    unpack(context);
    //Apply an initial ordering to the jars which governs which will be scanned for META-INF
    //info and annotations. The ordering is based on inclusion patterns.
    String tmp = (String) context.getAttribute(WEBINF_JAR_PATTERN);
    Pattern webInfPattern = (tmp == null ? null : Pattern.compile(tmp));
    tmp = (String) context.getAttribute(CONTAINER_JAR_PATTERN);
    Pattern containerPattern = (tmp == null ? null : Pattern.compile(tmp));
    //Apply ordering to container jars - if no pattern is specified, we won't
    //match any of the container jars
    PatternMatcher containerJarNameMatcher = new PatternMatcher() {

        public void matched(URI uri) throws Exception {
            context.getMetaData().addContainerResource(Resource.newResource(uri));
        }
    };
    ClassLoader loader = null;
    if (context.getClassLoader() != null)
        loader = context.getClassLoader().getParent();
    while (loader != null && (loader instanceof URLClassLoader)) {
        URL[] urls = ((URLClassLoader) loader).getURLs();
        if (urls != null) {
            URI[] containerUris = new URI[urls.length];
            int i = 0;
            for (URL u : urls) {
                try {
                    containerUris[i] = u.toURI();
                } catch (URISyntaxException e) {
                    containerUris[i] = new URI(u.toString().replaceAll(" ", "%20"));
                }
                i++;
            }
            containerJarNameMatcher.match(containerPattern, containerUris, false);
        }
        loader = loader.getParent();
    }
    //Apply ordering to WEB-INF/lib jars
    PatternMatcher webInfJarNameMatcher = new PatternMatcher() {

        @Override
        public void matched(URI uri) throws Exception {
            context.getMetaData().addWebInfJar(Resource.newResource(uri));
        }
    };
    List<Resource> jars = findJars(context);
    //Convert to uris for matching
    URI[] uris = null;
    if (jars != null) {
        uris = new URI[jars.size()];
        int i = 0;
        for (Resource r : jars) {
            uris[i++] = r.getURI();
        }
    }
    //null is inclusive, no pattern == all jars match
    webInfJarNameMatcher.match(webInfPattern, uris, true);
    //No pattern to appy to classes, just add to metadata
    context.getMetaData().setWebInfClassesDirs(findClassDirs(context));
}
Also used : Pattern(java.util.regex.Pattern) JarResource(org.eclipse.jetty.util.resource.JarResource) Resource(org.eclipse.jetty.util.resource.Resource) URISyntaxException(java.net.URISyntaxException) URI(java.net.URI) URL(java.net.URL) URLClassLoader(java.net.URLClassLoader) URLClassLoader(java.net.URLClassLoader) PatternMatcher(org.eclipse.jetty.util.PatternMatcher)

Aggregations

URI (java.net.URI)2 URISyntaxException (java.net.URISyntaxException)2 URL (java.net.URL)2 URLClassLoader (java.net.URLClassLoader)2 Pattern (java.util.regex.Pattern)2 PatternMatcher (org.eclipse.jetty.util.PatternMatcher)2 Resource (org.eclipse.jetty.util.resource.Resource)2 File (java.io.File)1 AntClassLoader (org.apache.tools.ant.AntClassLoader)1 JarResource (org.eclipse.jetty.util.resource.JarResource)1 WebAppClassLoader (org.eclipse.jetty.webapp.WebAppClassLoader)1