Hi,
Here is the code where I start jetty:
Server server = new Server(8180); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); context.setWelcomeFiles(new String[]{"index.html"});
ServletHolder servletHolder = new ServletHolder(new DefaultServlet()); URL resource = getClass().getResource("/web/"); String resourceBase = resource.toURI().toString(); servletHolder.setInitParameter("resourceBase", resourceBase); context.addServlet(servletHolder, "/");
server.setHandler(context); server.start();
My onejar.jar looks like this:
onejar.jar main/myapp.jar main/myapp.jar/web/index.html
(Rest omitted for readability).
I debugged through the application and noticed it throws (and ignores) an exception in the org.eclipse.jetty.util.resource.JarFileResource class in the method exists() in this piece of code:
try { JarURLConnection c=(JarURLConnection)((new URL(_jarUrl)).openConnection()); c.setUseCaches(getUseCaches()); jarFile=c.getJarFile(); } catch(Exception e) { Log.ignore(e); }
The _jarUrl contains: jar:file:/target/onejar.jar!/main/myapp.jar!/web/index.html and throws a ZipException when doing c.getJarFile(): java.util.zip.ZipException: error in opening zip file.
Does anyone has experience in using embedded jetty with the mentioned onejar plugin? What I'd like to do is do java -jar myjar.jar where myjar contains everything that is needed, no additional files and such.
Extra information:
I also created a unit test for this asfollows:
@Test public void defaultServlet() throws Exception { final Server server = new Server(8181); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); context.setWelcomeFiles(new String[]{"index.html"}); DefaultServlet defaultServlet = new DefaultServlet(); ServletHolder servlet = new ServletHolder(defaultServlet); servlet.setInitParameter("resourceBase", "jar:file:/target/onejar.jar!/main/myapp.jar!/web/"); context.addServlet(servlet, "/"); server.setHandler(context); server.start(); Resource resource = defaultServlet.getResource("/index.html"); assertNotNull(resource); server.stop(); }
This tests succeeds, meaning resource is not null. Does a real request use something else to find the resources that the getResource method on the servlet?
Thanks in advance,
Lars
|