diff options
author | Jan Bartel | 2014-09-03 22:16:35 +0000 |
---|---|---|
committer | Jan Bartel | 2014-09-05 08:35:15 +0000 |
commit | 7199c6ceca5420d2792c4751622374271c084f2c (patch) | |
tree | bb05eada3c4089667ea836d5eb816adbd3ac65dd | |
parent | 8d332b0962e183679906738f6634f30ef0a84254 (diff) | |
download | org.eclipse.jetty.project-7199c6ceca5420d2792c4751622374271c084f2c.tar.gz org.eclipse.jetty.project-7199c6ceca5420d2792c4751622374271c084f2c.tar.xz org.eclipse.jetty.project-7199c6ceca5420d2792c4751622374271c084f2c.zip |
Switch to apache-jsp for jetty-osgi
17 files changed, 585 insertions, 108 deletions
diff --git a/apache-jsp/pom.xml b/apache-jsp/pom.xml index 7153ed9319..34d3b95017 100644 --- a/apache-jsp/pom.xml +++ b/apache-jsp/pom.xml @@ -26,6 +26,7 @@ </goals> <configuration> <instructions> + <Bundle-Description>Jetty-specific ServletContainerInitializer for Jasper</Bundle-Description> <Export-Package>org.eclipse.jetty.apache.jsp.*;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"</Export-Package> <Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)"</Require-Capability> <Provide-Capability>osgi.serviceloader; osgi.serviceloader=javax.servlet.ServletContainerInitializer</Provide-Capability> @@ -37,6 +38,29 @@ </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <executions> + <execution> + <id>artifact-jar</id> + <goals> + <goal>jar</goal> + </goals> + </execution> + <execution> + <id>test-jar</id> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> + <configuration> + <archive> + <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> + </archive> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> diff --git a/jetty-osgi/jetty-osgi-boot-jsp/pom.xml b/jetty-osgi/jetty-osgi-boot-jsp/pom.xml index 2a36eb3472..54374e665b 100644 --- a/jetty-osgi/jetty-osgi-boot-jsp/pom.xml +++ b/jetty-osgi/jetty-osgi-boot-jsp/pom.xml @@ -39,10 +39,31 @@ <!-- Orbit JSP Deps --> <dependency> <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-jsp</artifactId> + <artifactId>apache-jsp</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.eclipse.jetty.orbit</groupId> + <artifactId>javax.servlet.jsp.jstl</artifactId> + </dependency> + <dependency> + <groupId>org.glassfish.web</groupId> + <artifactId>javax.servlet.jsp.jstl</artifactId> + </dependency> + <dependency> + <groupId>org.mortbay.jasper</groupId> + <artifactId>apache-el</artifactId> + <version>8.0.9-SNAPSHOT</version> + </dependency> + </dependencies> +<!-- + <dependency> + <groupId>javax.el</groupId> + <artifactId>javax.el-api</artifactId> + <version>3.0.0</version> + </dependency> </dependencies> +--> <build> <plugins> @@ -96,7 +117,7 @@ javax.el;version="[3.0,3.1)", javax.servlet;version="[3.1,3.2)", javax.servlet.resources;version="[3.1,3.2)", - javax.servlet.jsp.resources;version="[3.1,3.2)", + javax.servlet.jsp.resources;version="[2.3,4)", javax.servlet.jsp;version="[2.3,2.4)", javax.servlet.jsp.el;version="[2.3,2.4)", javax.servlet.jsp.tagext;version="[2.3,2.4)", @@ -104,16 +125,20 @@ javax.servlet.jsp.jstl.fmt;version="1.2";resolution:=optional, javax.servlet.jsp.jstl.sql;version="1.2";resolution:=optional, javax.servlet.jsp.jstl.tlv;version="1.2";resolution:=optional, - org.apache.jasper;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.compiler;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.compiler.tagplugin;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.runtime;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.security;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.servlet;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.tagplugins.jstl;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.util;version="[2.3.2,2.4)";resolution:=optional, - org.apache.jasper.xmlparser;version="[2.3.2,2.4)";resolution:=optional, - org.glassfish.jsp.api;version="[2.3.2,2.4)";resolution:=optional, + org.apache.el;version="[8.0.9,9)";resolution:=optional, + org.apache.el.lang;version="[8.0.9,9)";resolution:=optional, + org.apache.el.stream;version="[8.0.9,9)";resolution:=optional, + org.apache.el.util;version="[8.0.9,9)";resolution:=optional, + org.apache.el.parser;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.compiler;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.compiler.tagplugin;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.runtime;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.security;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.servlet;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.tagplugins.jstl;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.util;version="[8.0.9,9)";resolution:=optional, + org.apache.jasper.xmlparser;version="[8.0.9,9)";resolution:=optional, org.apache.taglibs.standard;version="1.2";resolution:=optional, org.apache.taglibs.standard.extra.spath;version="1.2";resolution:=optional, org.apache.taglibs.standard.functions;version="1.2";resolution:=optional, @@ -137,6 +162,7 @@ org.apache.taglibs.standard.tag.rt.xml;version="1.2";resolution:=optional, org.apache.taglibs.standard.tei;version="1.2";resolution:=optional, org.apache.taglibs.standard.tlv;version="1.2";resolution:=optional, + org.apache.tomcat;version="[8.0.9,9)";resolution:=optional, org.osgi.*, org.xml.*;resolution:=optional, org.xml.sax.*;resolution:=optional, @@ -145,8 +171,8 @@ org.w3c.dom.ls;resolution:=optional, javax.xml.parser;resolution:=optional </Import-Package> - <_nouses>true</_nouses> - <DynamicImport-Package>org.apache.jasper.*;version="2.3"</DynamicImport-Package> + <_nouses>true</_nouses> + <DynamicImport-Package>org.apache.jasper.*;version="8.0.9",org.apache.el.*;version="8.0.9"</DynamicImport-Package> </instructions> </configuration> </plugin> diff --git a/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/ContainerTldBundleDiscoverer.java b/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/ContainerTldBundleDiscoverer.java index b88fda629d..7979d7bd47 100644 --- a/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/ContainerTldBundleDiscoverer.java +++ b/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/ContainerTldBundleDiscoverer.java @@ -27,10 +27,15 @@ import java.util.Set; import java.util.StringTokenizer; import java.util.regex.Pattern; +import javax.servlet.jsp.JspFactory; + import org.eclipse.jetty.deploy.DeploymentManager; +import org.eclipse.jetty.osgi.boot.JettyBootstrapActivator; import org.eclipse.jetty.osgi.boot.OSGiWebInfConfiguration; import org.eclipse.jetty.osgi.boot.utils.BundleFileLocatorHelper; import org.eclipse.jetty.osgi.boot.utils.TldBundleDiscoverer; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; @@ -39,15 +44,24 @@ import org.osgi.framework.FrameworkUtil; /** * ContainerTldBundleDiscoverer * + * Finds bundles that are considered as on the container classpath that + * contain tlds. + * + * The System property org.eclipse.jetty.osgi.tldbundles is a comma + * separated list of exact symbolic names of bundles that have container classpath + * tlds. * - * Use a System property to define bundles that contain tlds that need to - * be treated by jasper as if they were on the jetty container's classpath. + * The DeploymentManager context attribute "org.eclipse.jetty.server.webapp.containerIncludeBundlePattern" + * can be used to define a pattern of symbolic names of bundles that contain container + * classpath tlds. * - * The value of the property is evaluated against the DeploymentManager - * context attribute "org.eclipse.jetty.server.webapp.containerIncludeBundlePattern", - * which defines a pattern of matching bundle names. + * The matching bundles are converted to URLs that are put onto a special classloader that acts as the + * parent classloader for contexts deployed by the jetty Server instance (see ServerInstanceWrapper). * - * The bundle locations are converted to URLs for jasper's use. + * It also discovers the bundle that contains the jstl taglib and adds it into the + * "org.eclipse.jetty.server.webapp.containerIncludeBundlePattern" (if it is not already there) so + * that the WebInfOSGiConfiguration class will add the jstl taglib bundle into the list of container + * resources. * * Eg: * -Dorg.eclipse.jetty.osgi.tldbundles=org.springframework.web.servlet,com.opensymphony.module.sitemesh @@ -55,16 +69,20 @@ import org.osgi.framework.FrameworkUtil; */ public class ContainerTldBundleDiscoverer implements TldBundleDiscoverer { - /** - * Comma separated list of names of bundles that contain tld files that should be - * discoved by jasper as if they were on the container's classpath. - * Eg: - * -Djetty.osgi.tldbundles=org.springframework.web.servlet,com.opensymphony.module.sitemesh - */ - public static final String SYS_PROP_TLD_BUNDLES = "org.eclipse.jetty.osgi.tldbundles"; + private static final Logger LOG = Log.getLogger(ContainerTldBundleDiscoverer.class); + + private static String DEFAULT_JSP_FACTORY_IMPL_CLASS = "org.apache.jasper.runtime.JspFactoryImpl"; + /** + * Default name of a class that belongs to the jstl bundle. From that class + * we locate the corresponding bundle and register it as a bundle that + * contains tld files. + */ + private static String DEFAULT_JSTL_BUNDLE_CLASS = "org.apache.taglibs.standard.tag.el.core.WhenTag"; + private Bundle jstlBundle = null; + /** * Check the System property "org.eclipse.jetty.osgi.tldbundles" for names of * bundles that contain tlds and convert to URLs. @@ -72,19 +90,18 @@ public class ContainerTldBundleDiscoverer implements TldBundleDiscoverer * @return The location of the jars that contain tld files as URLs. */ public URL[] getUrlsForBundlesWithTlds(DeploymentManager deploymentManager, BundleFileLocatorHelper locatorHelper) throws Exception - { - // naive way of finding those bundles. - // lots of assumptions: for example we assume a single version of each - // bundle that would contain tld files. - // this is probably good enough as those tlds are loaded system-wide on - // jetty. - // to do better than this we need to do it on a per webapp basis. - // probably using custom properties in the ContextHandler service - // and mirroring those in the MANIFEST.MF + { + if (!isJspAvailable()) + { + return new URL[0]; + } + + if (jstlBundle == null) + jstlBundle = findJstlBundle(); Bundle[] bundles = FrameworkUtil.getBundle(ContainerTldBundleDiscoverer.class).getBundleContext().getBundles(); HashSet<URL> urls = new HashSet<URL>(); - String tmp = System.getProperty(SYS_PROP_TLD_BUNDLES); //comma separated exact names + String tmp = System.getProperty(OSGiWebInfConfiguration.SYS_PROP_TLD_BUNDLES); //comma separated exact names List<String> sysNames = new ArrayList<String>(); if (tmp != null) { @@ -93,13 +110,33 @@ public class ContainerTldBundleDiscoverer implements TldBundleDiscoverer sysNames.add(tokenizer.nextToken()); } tmp = (String) deploymentManager.getContextAttribute(OSGiWebInfConfiguration.CONTAINER_BUNDLE_PATTERN); //bundle name patterns + Pattern pattern = (tmp==null? null : Pattern.compile(tmp)); + + //check that the jstl bundle is not already included in the pattern, and include it if it is not because + //subsequent classes such as OSGiWebInfConfiguration use this pattern to determine which jars are + //considered to be on the container classpath + if (jstlBundle != null) + { + if (pattern == null) + { + pattern = Pattern.compile(jstlBundle.getSymbolicName()); + deploymentManager.setContextAttribute(OSGiWebInfConfiguration.CONTAINER_BUNDLE_PATTERN, jstlBundle.getSymbolicName()); + } + else if (!(pattern.matcher(jstlBundle.getSymbolicName()).matches())) + { + String s = tmp+"|"+jstlBundle.getSymbolicName(); + pattern = Pattern.compile(s); + deploymentManager.setContextAttribute(OSGiWebInfConfiguration.CONTAINER_BUNDLE_PATTERN, s); + } + } + + for (Bundle bundle : bundles) { if (sysNames.contains(bundle.getSymbolicName())) - convertBundleLocationToURL(locatorHelper, bundle, urls); - - if (pattern != null && pattern.matcher(bundle.getSymbolicName()).matches()) + convertBundleLocationToURL(locatorHelper, bundle, urls); + else if (pattern != null && pattern.matcher(bundle.getSymbolicName()).matches()) convertBundleLocationToURL(locatorHelper, bundle, urls); } @@ -108,6 +145,79 @@ public class ContainerTldBundleDiscoverer implements TldBundleDiscoverer } /** + * Check that jsp is on the classpath + * @return + */ + public boolean isJspAvailable() + { + try + { + getClass().getClassLoader().loadClass("org.apache.jasper.servlet.JspServlet"); + } + catch (Exception e) + { + LOG.warn("Unable to locate the JspServlet: jsp support unavailable.", e); + return false; + } + return true; + } + + + /** + * + * Some versions of JspFactory do Class.forName, which probably won't work in an + * OSGi environment. + */ + public void fixJspFactory () + { + try + { + Class<javax.servlet.ServletContext> servletContextClass = javax.servlet.ServletContext.class; + // bug #299733 + JspFactory fact = JspFactory.getDefaultFactory(); + if (fact == null) + { // bug #299733 + // JspFactory does a simple + // Class.getForName("org.apache.jasper.runtime.JspFactoryImpl") + // however its bundles does not import the jasper package + // so it fails. let's help things out: + fact = (JspFactory) JettyBootstrapActivator.class.getClassLoader().loadClass(DEFAULT_JSP_FACTORY_IMPL_CLASS).newInstance(); + JspFactory.setDefaultFactory(fact); + } + } + catch (Exception e) + { + LOG.warn("Unable to set the JspFactory: jsp support incomplete.", e); + } + } + + + /** + * Find the bundle that contains a jstl implementation class, which assumes that + * the jstl taglibs will be inside the same bundle. + * @return + */ + public Bundle findJstlBundle () + { + Class<?> jstlClass = null; + + try + { + jstlClass = JSTLBundleDiscoverer.class.getClassLoader().loadClass(DEFAULT_JSTL_BUNDLE_CLASS); + } + catch (ClassNotFoundException e) + { + LOG.info("jstl not on classpath", e); + } + + if (jstlClass != null) + //get the bundle containing jstl + return FrameworkUtil.getBundle(jstlClass); + + return null; + } + + /** * Resolves a bundle that contains tld files as a URL. The URLs are * used by jasper to discover the tld files. * diff --git a/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/JSTLBundleDiscoverer.java b/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/JSTLBundleDiscoverer.java index 04cdc72420..3857664942 100644 --- a/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/JSTLBundleDiscoverer.java +++ b/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jasper/JSTLBundleDiscoverer.java @@ -20,9 +20,11 @@ package org.eclipse.jetty.osgi.boot.jasper; import java.io.File; import java.io.InputStream; +import java.lang.reflect.Field; import java.net.URL; import java.util.ArrayList; import java.util.HashSet; +import java.util.Set; import javax.servlet.Servlet; import javax.servlet.jsp.JspContext; @@ -30,7 +32,6 @@ import javax.servlet.jsp.JspFactory; import org.apache.jasper.Constants; import org.apache.jasper.compiler.Localizer; -import org.apache.jasper.xmlparser.ParserUtils; import org.eclipse.jetty.deploy.DeploymentManager; import org.eclipse.jetty.osgi.boot.JettyBootstrapActivator; import org.eclipse.jetty.osgi.boot.utils.BundleFileLocatorHelper; @@ -85,10 +86,12 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer * implementation. bug #299733 */ private static String DEFAULT_JSP_FACTORY_IMPL_CLASS = "org.apache.jasper.runtime.JspFactoryImpl"; + + private static final Set<URL> __tldBundleCache = new HashSet<URL>(); public JSTLBundleDiscoverer() { - fixupDtdResolution(); + //fixupDtdResolution(); try { @@ -102,6 +105,7 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer } try { + Class<javax.servlet.ServletContext> servletContextClass = javax.servlet.ServletContext.class; // bug #299733 JspFactory fact = JspFactory.getDefaultFactory(); if (fact == null) @@ -143,7 +147,7 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer { ArrayList<URL> urls = new ArrayList<URL>(); - HashSet<Class<?>> classesToAddToTheTldBundles = new HashSet<Class<?>>(); + Class<?> jstlClass = null; // Look for the jstl bundle // We assume the jstl's tlds are defined there. @@ -151,18 +155,21 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer // So we can look for this class using this bundle's classloader: try { - Class<?> jstlClass = JSTLBundleDiscoverer.class.getClassLoader().loadClass(DEFAULT_JSTL_BUNDLE_CLASS); - - classesToAddToTheTldBundles.add(jstlClass); + jstlClass = JSTLBundleDiscoverer.class.getClassLoader().loadClass(DEFAULT_JSTL_BUNDLE_CLASS); } catch (ClassNotFoundException e) { LOG.info("jstl not on classpath", e); } - for (Class<?> cl : classesToAddToTheTldBundles) + + if (jstlClass != null) { - Bundle tldBundle = FrameworkUtil.getBundle(cl); + //get the bundle containing jstl + Bundle tldBundle = FrameworkUtil.getBundle(jstlClass); File tldBundleLocation = locatorHelper.getBundleInstallLocation(tldBundle); + + System.err.println("jstl bundle: "+tldBundle); + System.err.println("jstl bundle location: "+tldBundleLocation); if (tldBundleLocation != null && tldBundleLocation.isDirectory()) { // try to find the jar files inside this folder @@ -170,6 +177,7 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer { if (f.getName().endsWith(".jar") && f.isFile()) { + System.err.println("Tld jar in dir: "+f.toURI()); urls.add(f.toURI().toURL()); } else if (f.isDirectory() && f.getName().equals("lib")) @@ -178,6 +186,7 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer { if (f2.getName().endsWith(".jar") && f2.isFile()) { + System.err.println("Tld jar in lib dir: "+f2.toURI()); urls.add(f2.toURI().toURL()); } } @@ -187,9 +196,20 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer } else if (tldBundleLocation != null) { + System.err.println("Tld bundle uri: "+tldBundleLocation.toURI()); urls.add(tldBundleLocation.toURI().toURL()); + + String pattern = (String)deployer.getContextAttribute("org.eclipse.jetty.server.webapp.containerIncludeBundlePattern"); + pattern = (pattern==null?"":pattern); + if (!pattern.contains(tldBundle.getSymbolicName())) + { + pattern += "|"+tldBundle.getSymbolicName(); + deployer.setContextAttribute("org.eclipse.jetty.server.webapp.containerIncludeBundlePattern", pattern); + } + System.err.println("PATTERN: "+pattern); } } + return urls.toArray(new URL[urls.size()]); } @@ -209,11 +229,12 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer * new value on a static friendly field :( * </p> */ - void fixupDtdResolution() + void fixupDtdResolution() { try { - ParserUtils.setEntityResolver(new MyFixedupEntityResolver()); + // ParserUtils.setEntityResolver(new MyFixedupEntityResolver()); + } catch (Exception e) @@ -227,21 +248,21 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer * Instead of using the ParserUtil's classloader, we use a class that is * indeed next to the resource for sure. */ - static class MyFixedupEntityResolver implements EntityResolver - { + //static class MyFixedupEntityResolver implements EntityResolver + //{ /** * Same values than in ParserUtils... */ - static final String[] CACHED_DTD_PUBLIC_IDS = { Constants.TAGLIB_DTD_PUBLIC_ID_11, Constants.TAGLIB_DTD_PUBLIC_ID_12, + /* static final String[] CACHED_DTD_PUBLIC_IDS = { Constants.TAGLIB_DTD_PUBLIC_ID_11, Constants.TAGLIB_DTD_PUBLIC_ID_12, Constants.WEBAPP_DTD_PUBLIC_ID_22, Constants.WEBAPP_DTD_PUBLIC_ID_23, }; static final String[] CACHED_DTD_RESOURCE_PATHS = { Constants.TAGLIB_DTD_RESOURCE_PATH_11, Constants.TAGLIB_DTD_RESOURCE_PATH_12, Constants.WEBAPP_DTD_RESOURCE_PATH_22, Constants.WEBAPP_DTD_RESOURCE_PATH_23, }; static final String[] CACHED_SCHEMA_RESOURCE_PATHS = { Constants.TAGLIB_SCHEMA_RESOURCE_PATH_20, Constants.TAGLIB_SCHEMA_RESOURCE_PATH_21, - Constants.WEBAPP_SCHEMA_RESOURCE_PATH_24, Constants.WEBAPP_SCHEMA_RESOURCE_PATH_25, }; + Constants.WEBAPP_SCHEMA_RESOURCE_PATH_24, Constants.WEBAPP_SCHEMA_RESOURCE_PATH_25, };*/ - public InputSource resolveEntity(String publicId, String systemId) throws SAXException + /* public InputSource resolveEntity(String publicId, String systemId) throws SAXException { for (int i = 0; i < CACHED_DTD_PUBLIC_IDS.length; i++) { @@ -255,11 +276,11 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer { input = JspContext.class.getResourceAsStream(resourcePath); if (input == null) - { + {*/ // if that failed try again with the original code: // although it is likely not changed. - input = this.getClass().getResourceAsStream(resourcePath); - } + /* input = this.getClass().getResourceAsStream(resourcePath); + } } if (input == null) { throw new SAXException(Localizer.getMessage("jsp.error.internal.filenotfound", resourcePath)); } InputSource isrc = new InputSource(input); @@ -269,6 +290,6 @@ public class JSTLBundleDiscoverer implements TldBundleDiscoverer return null; } - } + }*/ } diff --git a/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jsp/FragmentActivator.java b/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jsp/FragmentActivator.java index d9bd9b69e8..7417580102 100644 --- a/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jsp/FragmentActivator.java +++ b/jetty-osgi/jetty-osgi-boot-jsp/src/main/java/org/eclipse/jetty/osgi/boot/jsp/FragmentActivator.java @@ -18,17 +18,16 @@ package org.eclipse.jetty.osgi.boot.jsp; -import org.eclipse.jetty.osgi.boot.BundleWebAppProvider; + import org.eclipse.jetty.osgi.boot.internal.serverfactory.ServerInstanceWrapper; import org.eclipse.jetty.osgi.boot.jasper.ContainerTldBundleDiscoverer; -import org.eclipse.jetty.osgi.boot.jasper.JSTLBundleDiscoverer; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; /** * FragmentActivator * - * Sets up support for jsp. All relevant jsp jars must also be installed + * Sets up support for jsp and jstl. All relevant jsp jars must also be installed * into the osgi environment. * <p> * Note that as this is part of a bundle fragment, this activator is NOT @@ -54,7 +53,6 @@ public class FragmentActivator implements BundleActivator //set up some classes that will look for bundles with tlds that must be converted //to urls and treated as if they are on the Jetty container's classpath so that //jasper can deal with them - ServerInstanceWrapper.addContainerTldBundleDiscoverer(new JSTLBundleDiscoverer()); ServerInstanceWrapper.addContainerTldBundleDiscoverer(new ContainerTldBundleDiscoverer()); } diff --git a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/annotations/AnnotationConfiguration.java b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/annotations/AnnotationConfiguration.java index 14c796d213..7ceca896c1 100644 --- a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/annotations/AnnotationConfiguration.java +++ b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/annotations/AnnotationConfiguration.java @@ -67,6 +67,10 @@ public class AnnotationConfiguration extends org.eclipse.jetty.annotations.Annot } + public AnnotationConfiguration() + { + System.err.println("Constructed osgi.AnnotationConfiguration"); + } /** * This parser scans the bundles using the OSGi APIs instead of assuming a jar. */ diff --git a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/AbstractWebAppProvider.java b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/AbstractWebAppProvider.java index 6d31ebd03c..97f9296114 100644 --- a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/AbstractWebAppProvider.java +++ b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/AbstractWebAppProvider.java @@ -268,6 +268,7 @@ public abstract class AbstractWebAppProvider extends AbstractLifeCycle implement //Sets the location of the war file // converts bundleentry: protocol if necessary + System.err.println("WAR : "+BundleFileLocatorHelperFactory.getFactory().getHelper().getLocalURL(url).toString()); _webApp.setWar(BundleFileLocatorHelperFactory.getFactory().getHelper().getLocalURL(url).toString()); // Set up what has been configured on the provider diff --git a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/OSGiWebInfConfiguration.java b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/OSGiWebInfConfiguration.java index 69a7ce8cdb..4482640bcf 100644 --- a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/OSGiWebInfConfiguration.java +++ b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/OSGiWebInfConfiguration.java @@ -50,7 +50,14 @@ public class OSGiWebInfConfiguration extends WebInfConfiguration { private static final Logger LOG = Log.getLogger(WebInfConfiguration.class); - + /** + * Comma separated list of symbolic names of bundles that contain tlds that should be considered + * as on the container classpath + */ + public static final String SYS_PROP_TLD_BUNDLES = "org.eclipse.jetty.osgi.tldbundles"; + /** + * Regex of symbolic names of bundles that should be considered to be on the container classpath + */ public static final String CONTAINER_BUNDLE_PATTERN = "org.eclipse.jetty.server.webapp.containerIncludeBundlePattern"; public static final String FRAGMENT_AND_REQUIRED_BUNDLES = "org.eclipse.jetty.osgi.fragmentAndRequiredBundles"; public static final String FRAGMENT_AND_REQUIRED_RESOURCES = "org.eclipse.jetty.osgi.fragmentAndRequiredResources"; @@ -84,7 +91,7 @@ public class OSGiWebInfConfiguration extends WebInfConfiguration String tmp = (String)context.getAttribute(CONTAINER_BUNDLE_PATTERN); Pattern pattern = (tmp==null?null:Pattern.compile(tmp)); List<String> names = new ArrayList<String>(); - tmp = System.getProperty("org.eclipse.jetty.osgi.tldbundles"); + tmp = System.getProperty(SYS_PROP_TLD_BUNDLES); if (tmp != null) { StringTokenizer tokenizer = new StringTokenizer(tmp, ", \n\r\t", false); diff --git a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/internal/webapp/OSGiWebappClassLoader.java b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/internal/webapp/OSGiWebappClassLoader.java index 94a06f62f4..bdd52ac537 100644 --- a/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/internal/webapp/OSGiWebappClassLoader.java +++ b/jetty-osgi/jetty-osgi-boot/src/main/java/org/eclipse/jetty/osgi/boot/internal/webapp/OSGiWebappClassLoader.java @@ -97,6 +97,13 @@ public class OSGiWebappClassLoader extends WebAppClassLoader implements BundleRe + @Override + public Class<?> loadClass(String name) throws ClassNotFoundException + { + System.err.println("LOADING CLASS: "+name); + return super.loadClass(name); + } + /* ------------------------------------------------------------ */ /** * Returns the <code>Bundle</code> that defined this web-application. diff --git a/jetty-osgi/test-jetty-osgi/pom.xml b/jetty-osgi/test-jetty-osgi/pom.xml index 6b545473d5..2a734b968b 100644 --- a/jetty-osgi/test-jetty-osgi/pom.xml +++ b/jetty-osgi/test-jetty-osgi/pom.xml @@ -130,12 +130,7 @@ </exclusion> </exclusions> </dependency> - <dependency> - <groupId>org.eclipse.jetty.toolchain</groupId> - <artifactId>jetty-jsp-fragment</artifactId> - <version>2.3.3</version> - <scope>test</scope> - </dependency> + <dependency> <groupId>org.eclipse.jetty.osgi</groupId> <artifactId>jetty-httpservice</artifactId> @@ -144,10 +139,11 @@ </dependency> <dependency> - <groupId>javax.servlet</groupId> - <artifactId>javax.servlet-api</artifactId> - <scope>test</scope> + <groupId>org.eclipse.jetty.toolchain</groupId> + <artifactId>jetty-osgi-servlet-api</artifactId> + <version>3.1-SNAPSHOT</version> </dependency> + <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jta_1.1_spec</artifactId> @@ -168,6 +164,12 @@ <scope>test</scope> </dependency> + <dependency> + <groupId>org.mortbay.jasper</groupId> + <artifactId>apache-el</artifactId> + <version>8.0.9-SNAPSHOT</version> + <scope>test</scope> + </dependency> <!-- Jetty Deps --> @@ -341,6 +343,15 @@ <classifier>webbundle</classifier> <scope>test</scope> </dependency> + + <dependency> + <groupId>org.eclipse.jetty.tests</groupId> + <artifactId>test-spec-webapp</artifactId> + <version>${project.version}</version> + <type>war</type> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.eclipse.jetty.osgi</groupId> <artifactId>test-jetty-osgi-context</artifactId> diff --git a/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootCore.java b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootCore.java index 2565c5be95..b5035fadff 100644 --- a/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootCore.java +++ b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootCore.java @@ -88,13 +88,10 @@ public class TestJettyOSGiBootCore res.add(mavenBundle().groupId( "org.apache.aries" ).artifactId( "org.apache.aries.util" ).versionAsInProject().start()); res.add(mavenBundle().groupId( "org.apache.aries.spifly" ).artifactId( "org.apache.aries.spifly.dynamic.bundle" ).versionAsInProject().start()); - res.add(mavenBundle().groupId( "javax.servlet" ).artifactId( "javax.servlet-api" ).versionAsInProject().noStart()); + res.add(mavenBundle().groupId( "org.eclipse.jetty.toolchain" ).artifactId( "jetty-osgi-servlet-api" ).versionAsInProject().noStart()); res.add(mavenBundle().groupId( "javax.annotation" ).artifactId( "javax.annotation-api" ).versionAsInProject().noStart()); res.add(mavenBundle().groupId( "org.apache.geronimo.specs" ).artifactId( "geronimo-jta_1.1_spec" ).version("1.1.1").noStart()); res.add(mavenBundle().groupId( "org.eclipse.jetty.orbit" ).artifactId( "javax.mail.glassfish" ).version( "1.4.1.v201005082020" ).noStart()); - - - res.add(mavenBundle().groupId( "org.eclipse.jetty.toolchain" ).artifactId( "jetty-schemas" ).versionAsInProject().noStart()); res.add(mavenBundle().groupId( "org.eclipse.jetty" ).artifactId( "jetty-deploy" ).versionAsInProject().noStart()); res.add(mavenBundle().groupId( "org.eclipse.jetty" ).artifactId( "jetty-server" ).versionAsInProject().noStart()); @@ -122,6 +119,32 @@ public class TestJettyOSGiBootCore res.add(mavenBundle().groupId( "org.eclipse.jetty.osgi" ).artifactId( "jetty-osgi-boot" ).versionAsInProject().start()); return res; } + + public static List<Option> consoleDependencies() + { + List<Option> res = new ArrayList<Option>(); + res.add(systemProperty("osgi.console").value("6666")); + res.add(systemProperty("osgi.console.enable.builtin").value("true")); + return res; + } + + + + public static List<Option> jspDependencies() + { + List<Option> res = new ArrayList<Option>(); + + //jetty jsp bundles + res.add(mavenBundle().groupId("org.eclipse.jetty.toolchain").artifactId("jetty-schemas").versionAsInProject()); + res.add(mavenBundle().groupId("org.eclipse.jetty.orbit").artifactId("javax.servlet.jsp.jstl").versionAsInProject()); + res.add(mavenBundle().groupId("org.mortbay.jasper").artifactId("apache-el").versionAsInProject()); + res.add(mavenBundle().groupId("org.mortbay.jasper").artifactId("apache-jsp").versionAsInProject()); + res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("apache-jsp").versionAsInProject()); + res.add(mavenBundle().groupId("org.glassfish.web").artifactId("javax.servlet.jsp.jstl").versionAsInProject()); + res.add(mavenBundle().groupId("org.eclipse.jetty.orbit").artifactId("org.eclipse.jdt.core").versionAsInProject()); + res.add(mavenBundle().groupId("org.eclipse.jetty.osgi").artifactId("jetty-osgi-boot-jsp").versionAsInProject().noStart()); + return res; + } public static List<Option> httpServiceJetty() { diff --git a/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWebAppAsService.java b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWebAppAsService.java index cf2e30fab1..1119446a3e 100644 --- a/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWebAppAsService.java +++ b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWebAppAsService.java @@ -110,15 +110,8 @@ public class TestJettyOSGiBootWebAppAsService public static List<Option> jspDependencies() { List<Option> res = new ArrayList<Option>(); - - //jsp bundles - res.add(mavenBundle().groupId("javax.servlet.jsp").artifactId("javax.servlet.jsp-api").versionAsInProject()); - res.add(mavenBundle().groupId("org.eclipse.jetty.orbit").artifactId("javax.servlet.jsp.jstl").versionAsInProject()); - res.add(mavenBundle().groupId("org.glassfish.web").artifactId("javax.servlet.jsp.jstl").versionAsInProject()); - res.add(mavenBundle().groupId("org.glassfish").artifactId("javax.el").versionAsInProject()); - res.add(mavenBundle().groupId("org.eclipse.jetty.orbit").artifactId("org.eclipse.jdt.core").versionAsInProject()); - res.add(mavenBundle().groupId("org.eclipse.jetty.toolchain").artifactId("jetty-jsp-fragment").versionAsInProject().noStart()); - res.add(mavenBundle().groupId("org.eclipse.jetty.osgi").artifactId("jetty-osgi-boot-jsp").versionAsInProject().noStart()); + + res.addAll(TestJettyOSGiBootCore.jspDependencies()); // a bundle that registers a webapp as a service for the jetty osgi core // to pick up and deploy diff --git a/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWithAnnotations.java b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWithAnnotations.java new file mode 100644 index 0000000000..e1bdd8b2c4 --- /dev/null +++ b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWithAnnotations.java @@ -0,0 +1,179 @@ +// +// ======================================================================== +// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.osgi.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.options; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.inject.Inject; + +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.api.ContentResponse; +import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.osgi.boot.OSGiServerConstants; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.CoreOptions; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.osgi.framework.BundleContext; + +/** + * Pax-Exam to make sure the jetty-osgi-boot can be started along with the + * httpservice web-bundle. Then make sure we can deploy an OSGi service on the + * top of this. + */ +@RunWith(PaxExam.class) +@Ignore +public class TestJettyOSGiBootWithAnnotations +{ + private static final String LOG_LEVEL = "WARN"; + + @Inject + BundleContext bundleContext = null; + + @Configuration + public static Option[] configure() + { + + ArrayList<Option> options = new ArrayList<Option>(); + options.add(CoreOptions.junitBundles()); + options.addAll(configureJettyHomeAndPort("jetty-selector.xml")); + options.add(CoreOptions.bootDelegationPackages("org.xml.sax", "org.xml.*", "org.w3c.*", "javax.xml.*", "javax.activation.*")); + options.add(CoreOptions.systemPackages("com.sun.org.apache.xalan.internal.res","com.sun.org.apache.xml.internal.utils", + "com.sun.org.apache.xml.internal.utils", "com.sun.org.apache.xpath.internal", + "com.sun.org.apache.xpath.internal.jaxp", "com.sun.org.apache.xpath.internal.objects")); + + options.addAll(TestJettyOSGiBootCore.coreJettyDependencies()); + options.addAll(Arrays.asList(options(systemProperty("pax.exam.logging").value("none")))); + options.addAll(Arrays.asList(options(systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value(LOG_LEVEL)))); + options.addAll(Arrays.asList(options(systemProperty("org.eclipse.jetty.LEVEL").value(LOG_LEVEL)))); + //options.addAll(TestJettyOSGiBootCore.consoleDependencies()); + options.addAll(jspDependencies()); + + return options.toArray(new Option[options.size()]); + } + + public static List<Option> configureJettyHomeAndPort(String jettySelectorFileName) + { + File etcFolder = new File("src/test/config/etc"); + String etc = "file://" + etcFolder.getAbsolutePath(); + List<Option> options = new ArrayList<Option>(); + String xmlConfigs = etc + "/jetty.xml;" + + etc + + "/" + + jettySelectorFileName + + ";" + + etc + + "/jetty-ssl.xml;" + + etc + + "/jetty-https.xml;" + + etc + + "/jetty-deployer.xml;" + + etc + + "/jetty-testrealm.xml"; + + options.add(systemProperty(OSGiServerConstants.MANAGED_JETTY_XML_CONFIG_URLS).value(xmlConfigs)); + options.add(systemProperty("jetty.port").value(String.valueOf(TestJettyOSGiBootCore.DEFAULT_JETTY_HTTP_PORT))); + options.add(systemProperty("jetty.home").value(etcFolder.getParentFile().getAbsolutePath())); + return options; + } + + public static List<Option> jspDependencies() + { + List<Option> res = new ArrayList<Option>(); + res.addAll(TestJettyOSGiBootCore.jspDependencies()); + + //test webapp bundle + res.add(mavenBundle().groupId("org.eclipse.jetty.tests").artifactId("test-spec-webapp").classifier("webbundle").versionAsInProject()); + + return res; + } + + + + @Ignore + @Test + public void assertAllBundlesActiveOrResolved() + { + TestOSGiUtil.assertAllBundlesActiveOrResolved(bundleContext); + } + + // at the moment can't run httpservice with jsp at the same time. + // that is a regression in jetty-9 + @Ignore + @Test + public void testHttpService() throws Exception + { + TestOSGiUtil.testHttpServiceGreetings(bundleContext, "http", TestJettyOSGiBootCore.DEFAULT_JETTY_HTTP_PORT); + } + + + @Ignore + @Test + public void testJspDump() throws Exception + { + HttpClient client = new HttpClient(); + try + { + client.start(); + ContentResponse response = client.GET("http://127.0.0.1:" + TestJettyOSGiBootCore.DEFAULT_JETTY_HTTP_PORT + "/jsp/dump.jsp"); + assertEquals(HttpStatus.OK_200, response.getStatus()); + + String content = new String(response.getContent()); + assertTrue(content.contains("<tr><th>ServletPath:</th><td>/jsp/dump.jsp</td></tr>")); + + } + finally + { + client.stop(); + } + } + + @Test + public void testIndex() throws Exception + { + HttpClient client = new HttpClient(); + try + { + client.start(); + ContentResponse response = client.GET("http://127.0.0.1:" + TestJettyOSGiBootCore.DEFAULT_JETTY_HTTP_PORT + "/index.html"); + //assertEquals(HttpStatus.OK_200, response.getStatus()); + + String content = new String(response.getContent()); + System.err.println(content); + + } + finally + { + client.stop(); + } + } + +} diff --git a/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWithJsp.java b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWithJsp.java index b2a9be5887..305fe9a0d3 100644 --- a/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWithJsp.java +++ b/jetty-osgi/test-jetty-osgi/src/test/java/org/eclipse/jetty/osgi/test/TestJettyOSGiBootWithJsp.java @@ -52,7 +52,7 @@ import org.osgi.framework.BundleContext; @RunWith(PaxExam.class) public class TestJettyOSGiBootWithJsp { - private static final String LOG_LEVEL = "WARN"; + private static final String LOG_LEVEL = "INFO"; @Inject BundleContext bundleContext = null; @@ -73,7 +73,7 @@ public class TestJettyOSGiBootWithJsp options.addAll(Arrays.asList(options(systemProperty("pax.exam.logging").value("none")))); options.addAll(Arrays.asList(options(systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value(LOG_LEVEL)))); options.addAll(Arrays.asList(options(systemProperty("org.eclipse.jetty.LEVEL").value(LOG_LEVEL)))); - + options.addAll(Arrays.asList(options(systemProperty("org.eclipse.jetty.annotations.LEVEL").value("DEBUG")))); options.addAll(jspDependencies()); return options.toArray(new Option[options.size()]); } @@ -106,26 +106,19 @@ public class TestJettyOSGiBootWithJsp public static List<Option> jspDependencies() { List<Option> res = new ArrayList<Option>(); - - //jetty jsp bundles - res.add(mavenBundle().groupId("javax.servlet.jsp").artifactId("javax.servlet.jsp-api").versionAsInProject()); - res.add(mavenBundle().groupId("org.eclipse.jetty.orbit").artifactId("javax.servlet.jsp.jstl").versionAsInProject()); - res.add(mavenBundle().groupId("org.glassfish.web").artifactId("javax.servlet.jsp.jstl").versionAsInProject()); - res.add(mavenBundle().groupId("org.glassfish").artifactId("javax.el").versionAsInProject()); - res.add(mavenBundle().groupId("org.eclipse.jetty.orbit").artifactId("org.eclipse.jdt.core").versionAsInProject()); - res.add(mavenBundle().groupId("org.eclipse.jetty.toolchain").artifactId("jetty-jsp-fragment").versionAsInProject().noStart()); - res.add(mavenBundle().groupId("org.eclipse.jetty.osgi").artifactId("jetty-osgi-boot-jsp").versionAsInProject().noStart()); - + res.addAll(TestJettyOSGiBootCore.jspDependencies()); //test webapp bundle res.add(mavenBundle().groupId("org.eclipse.jetty").artifactId("test-jetty-webapp").classifier("webbundle").versionAsInProject()); - + return res; } - @Ignore + @Test + @Ignore public void assertAllBundlesActiveOrResolved() { + TestOSGiUtil.debugBundles(bundleContext); TestOSGiUtil.assertAllBundlesActiveOrResolved(bundleContext); } @@ -142,16 +135,15 @@ public class TestJettyOSGiBootWithJsp @Test public void testJspDump() throws Exception { + HttpClient client = new HttpClient(); try { client.start(); - ContentResponse response = client.GET("http://127.0.0.1:" + TestJettyOSGiBootCore.DEFAULT_JETTY_HTTP_PORT + "/jsp/dump.jsp"); + ContentResponse response = client.GET("http://127.0.0.1:" + TestJettyOSGiBootCore.DEFAULT_JETTY_HTTP_PORT + "/jsp/jstl.jsp"); assertEquals(HttpStatus.OK_200, response.getStatus()); - String content = new String(response.getContent()); - assertTrue(content.contains("<tr><th>ServletPath:</th><td>/jsp/dump.jsp</td></tr>")); - + assertTrue(content.contains("JSTL Example")); } finally { @@ -540,7 +540,7 @@ <dependency> <groupId>org.mortbay.jasper</groupId> <artifactId>apache-jsp</artifactId> - <version>8.0.9.M2</version> + <version>8.0.9-SNAPSHOT</version> </dependency> <dependency> diff --git a/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml b/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml index b9a3093a8a..43e496ac68 100644 --- a/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml +++ b/tests/test-webapps/test-servlet-spec/test-spec-webapp/pom.xml @@ -18,6 +18,69 @@ <skip>true</skip> </configuration> </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + <configuration> + <descriptors> + <descriptor>src/main/assembly/config.xml</descriptor> + <descriptor>src/main/assembly/web-bundle.xml</descriptor> + </descriptors> + <archive> + <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> + </archive> + </configuration> + </execution> + </executions> + </plugin> + <!-- also make this webapp an osgi bundle --> + <plugin> + <artifactId>maven-war-plugin</artifactId> + <configuration> + <archive> + <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> + </archive> + </configuration> + </plugin> + + + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <supportedProjectTypes> + <supportedProjectType>war</supportedProjectType> + </supportedProjectTypes> + </configuration> + <executions> + <execution> + <id>bundle-manifest</id> + <phase>process-classes</phase> + <goals> + <goal>manifest</goal> + </goals> + <configuration> + <instructions> + <Bundle-SymbolicName>org.eclipse.jetty.tests.test-spec-webapp</Bundle-SymbolicName> + <Import-Package>javax.servlet.jsp.*;version="[2.2.0, 3.0)",javax.transaction.*;version="[1.1, 2.0)", javax.servlet.*;version="3.0",org.eclipse.jetty.*;version="9.2",*</Import-Package> + <Export-Package>!com.acme*</Export-Package> + <Web-ContextPath>/</Web-ContextPath> + <Bundle-ClassPath>.,WEB-INF/classes,WEB-INF/lib</Bundle-ClassPath> + </instructions> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> <artifactId>maven-antrun-plugin</artifactId> <executions> @@ -65,7 +128,7 @@ </execution> </executions> </plugin> - <plugin> + <!-- plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-3</version> @@ -82,7 +145,7 @@ </configuration> </execution> </executions> - </plugin> + </plugin --> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> diff --git a/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/assembly/web-bundle.xml b/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/assembly/web-bundle.xml new file mode 100644 index 0000000000..2f3701a199 --- /dev/null +++ b/tests/test-webapps/test-servlet-spec/test-spec-webapp/src/main/assembly/web-bundle.xml @@ -0,0 +1,18 @@ +<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> + <id>webbundle</id> + <formats> + <format>jar</format> + </formats> + <includeBaseDirectory>false</includeBaseDirectory> + <fileSets> + <fileSet> + <directory>${basedir}/${project.build.directory}/${project.build.finalName}/</directory> + <outputDirectory></outputDirectory> + <includes> + <include>**/*.*</include> + </includes> + </fileSet> + </fileSets> +</assembly> |