So you did. Sorry, guess I didn't get down that far. Well, while it looks to me like you have the slf4j jars on your classpath, for some reason they're not getting seen. I don't know why that would be. It seems that the exec-maven-plugin should handle that properly, so I imagine that it's something related to Jetty's classloader handling for webapps. Unfortunately, I'm not overly versed in that. So, I'd say that's where you should start looking.
On 07/09/2011 09:55 AM, James Whetstone wrote: > So I put the contents of my pom.xml file and my web.xml and my application > in this posting. You just gotta scroll down (a lot). > > One thing I didn't post was the command I'm using to compile and run my app > which is the following: > > mvn clean compile exec:java > > ---James > > > ----- Original Message ----- > From: "Jared Bunting" <[email protected]> > To: <[email protected]> > Sent: Saturday, July 09, 2011 4:13 AM > Subject: Re: Runtime error in web app > > >> Can you share your pom, the command you use to run, and any shiro >> integration code? My first guess would be that you need slf4j libs on >> your classpath. >> >> Thanks, >> Jared >> >> James Whetstone <[email protected]> wrote: >> >> >> I've built an example web app using maven that is dying during >> initialization and I can't figure out how to address the error. >> >> I'm using jetty 7.4.2 and Shiro 1.1.0. My example app is using jetty >> embedded. >> >> My project compiles but when I try to run it, I get some errors: >> >> 2011-07-09 00:38:26.390:INFO::jetty-7.4.2.v20110526 >> 2011-07-09 00:38:26.577:INFO::NO JSP Support for /, did not find >> org.apache.jasper.servlet.JspServlet >> 2011-07-09 00:38:26.624:INFO::started >> o.e.j.w.WebAppContext{/,file:/C:/JettyMavenHelloWarApp/src/main/webapp/} >> 2011-07-09 00:38:26.640:WARN::FAILED ShiroFilter: >> java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory >> 2011-07-09 00:38:26.640:WARN::FAILED >> o.e.j.w.WebAppContext{/,file:/C:/JettyMavenHelloWarApp/src/main/webapp/}: >> java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory >> 2011-07-09 00:38:26.640:WARN::FAILED >> org.eclipse.jetty.server.handler.HandlerList@1b70f9e: >> java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory >> 2011-07-09 00:38:26.765:INFO::Started [email protected]:80 >> STARTING >> 2011-07-09 00:38:27.140:INFO::Started >> [email protected]:443 >> STARTING >> 2011-07-09 00:38:27.155:WARN::FAILED >> org.eclipse.jetty.server.Server@739aa3: >> java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory >> [INFO] >> ------------------------------------------------------------------------ >> [INFO] BUILD FAILURE >> [INFO] >> ------------------------------------------------------------------------ >> [INFO] Total time: 3.422s >> [INFO] Finished at: Sat Jul 09 00:38:27 PDT 2011 >> [INFO] Final Memory: 7M/17M >> [INFO] >> ------------------------------------------------------------------------ >> [ERROR] Failed to execute goal >> org.codehaus.mojo:exec-maven-plugin:1.1:java >> (default-cli) on project hello-world: An exception occured while executing >> the Java class. null: InvocationTargetException: org/slf4j/ >> LoggerFactory: org.slf4j.LoggerFactory -> [Help 1] >> >> Here is the contents of my pom.xml file: >> >> <project xmlns="http://maven.apache.org/POM/4.0.0" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 >> http://maven.apache.org/maven-v4_0_0.xsd"> >> >> <modelVersion>4.0.0</modelVersion> >> <groupId>org.example</groupId> >> <artifactId>hello-world</artifactId> >> <version>0.1-SNAPSHOT</version> >> <packaging>jar</packaging> >> <name>Jetty HelloWorld</name> >> >> <properties> >> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> >> <jettyVersion>7.4.2.v20110526</jettyVersion> >> <slf4j.version>1.6.1</slf4j.version> >> </properties> >> >> <dependencies> >> >> <dependency> >> <groupId>org.slf4j</groupId> >> <artifactId>slf4j-api</artifactId> >> <version>${slf4j.version}</version> >> <scope>runtime</scope> >> </dependency> >> >> <dependency> >> <groupId>org.slf4j</groupId> >> <artifactId>slf4j-simple</artifactId> >> <version>${slf4j.version}</version> >> <scope>runtime</scope> >> </dependency> >> >> <dependency> >> <groupId>org.apache.shiro</groupId> >> <artifactId>shiro-core</artifactId> >> <version>1.1.0</version> >> </dependency> >> <dependency> >> <groupId>org.apache.shiro</groupId> >> <artifactId>shiro-web</artifactId> >> <version>1.1.0</version> >> </dependency> >> >> <dependency> >> <groupId>org.eclipse.jetty</groupId> >> <artifactId>jetty-server</artifactId> >> <version>${jettyVersion}</version> >> </dependency> >> <dependency> >> <groupId>org.eclipse.jetty</groupId> >> <artifactId>jetty-webapp</artifactId> >> <version>${jettyVersion}</version> >> </dependency> >> >> </dependencies> >> >> <build> >> <plugins> >> <plugin> >> <groupId>org.codehaus.mojo</groupId> >> <artifactId>exec-maven-plugin</artifactId> >> <version>1.1</version> >> <executions> >> <execution><goals><goal>java</goal></goals></execution> >> </executions> >> <configuration> >> <mainClass>org.example.AppServer</mainClass> >> </configuration> >> </plugin> >> >> </plugins> >> </build> >> >> </project> >> >> and here is my web.xml file: >> >> <?xml version="1.0" encoding="ISO-8859-1"?> >> <web-app >> xmlns="http://java.sun.com/xml/ns/javaee" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee >> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >> version="2.5"> >> <servlet> >> <servlet-name>Hello</servlet-name> >> <servlet-class>org.example.HelloServlet</servlet-class> >> </servlet> >> <servlet> >> <servlet-name>Login</servlet-name> >> <servlet-class>org.example.LoginServlet</servlet-class> >> </servlet> >> <servlet> >> <servlet-name>Recovery</servlet-name> >> <servlet-class>org.example.RecoveryServlet</servlet-class> >> </servlet> >> <servlet-mapping> >> <servlet-name>Hello</servlet-name> >> <url-pattern>/hello/*</url-pattern> >> </servlet-mapping> >> <servlet-mapping> >> <servlet-name>Login</servlet-name> >> <url-pattern>/login</url-pattern> >> </servlet-mapping> >> <servlet-mapping> >> <servlet-name>Recovery</servlet-name> >> <url-pattern>/recovery</url-pattern> >> </servlet-mapping> >> >> <filter> >> <filter-name>ShiroFilter</filter-name> >> >> <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class> >> <init-param> >> <param-name>config</param-name> >> <param-value> >> >> # The IniShiroFilter configuration is very powerful and >> flexible, while still remaining succinct. >> # Please read the >> org.apache.shiro.web.servlet.IniShiroFilter JavaDoc for information. >> >> # Quick Tip: Instead of having this configuration here in >> web.xml, you can instead >> # move all of this to a 'shiro.ini' file at the root of the >> classpath and remove >> # the 'config' init-param. Or you can specify the >> 'configPath' init-param and specify the >> # path to a resource at any location (url, file or >> classpath). This may be desired if the >> # config gets long and you want to keep web.xml clean. >> >> [users] >> # format: username = password, role1, role2, ..., roleN >> root = secret,admin >> guest = guest,guest >> presidentskroob = 12345,president >> darkhelmet = ludicrousspeed,darklord,schwartz >> lonestarr = vespa,goodguy,schwartz >> >> [roles] >> # format; roleName = permission1, permission2, ..., >> permissionN >> admin = * >> schwartz = lightsaber:* >> goodguy = winnebago:drive:eagle5 >> >> [filters] >> shiro.loginUrl = /index.html >> >> [urls] >> # The /login is not restricted to authenticated users >> (otherwise no one could log in!), but >> # the 'authc' filter must still be specified for it so it >> can process that url's >> # login submissions. It is 'smart' enough to allow those >> requests through as specified by the >> # shiro.loginUrl above. >> /index.html = authc >> >> /account/** = authc >> /remoting/** = authc, roles[b2bClient], >> perms["remote:invoke:lan,wan"] >> >> </param-value> >> </init-param> >> </filter> >> >> <filter-mapping> >> <filter-name>ShiroFilter</filter-name> >> <url-pattern>/*</url-pattern> >> </filter-mapping> >> </web-app> >> >> Lastly, here is my main java file "AppServer.java": >> >> package org.example; >> >> import org.eclipse.jetty.http.ssl.SslContextFactory; >> import org.eclipse.jetty.server.Connector; >> import org.eclipse.jetty.server.Handler; >> import org.eclipse.jetty.server.Server; >> import org.eclipse.jetty.server.handler.DefaultHandler; >> import org.eclipse.jetty.server.handler.HandlerList; >> import org.eclipse.jetty.server.handler.ResourceHandler; >> import org.eclipse.jetty.server.nio.SelectChannelConnector; >> import org.eclipse.jetty.server.ssl.SslSelectChannelConnector; >> import org.eclipse.jetty.webapp.WebAppContext; >> >> public class AppServer >> { >> public static void main(String[] args) throws Exception >> { >> Server server = new Server(); >> >> SelectChannelConnector connector0 = new SelectChannelConnector(); >> connector0.setPort(80); >> connector0.setMaxIdleTime(30000); >> connector0.setRequestHeaderSize(8192); >> >> SslSelectChannelConnector ssl_connector = new >> SslSelectChannelConnector(); >> String jetty_home = >> System.getProperty("jetty.home","C:/jetty-hightide-7.4.2.v20110526"); >> System.setProperty("jetty.home",jetty_home); >> >> ssl_connector.setPort(443); >> SslContextFactory cf = ssl_connector.getSslContextFactory(); >> cf.setKeyStore(jetty_home + "/etc/keystore"); >> cf.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4"); >> cf.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g"); >> >> server.setConnectors(new Connector[]{ connector0, ssl_connector }); >> >> WebAppContext context = new WebAppContext(); >> context.setDescriptor("/WEB-INF/web.xml"); >> >> context.setResourceBase("../JettyMavenHelloWarApp/src/main/webapp"); >> context.setContextPath("/"); >> context.setParentLoaderPriority(true); >> context.setInitParameter("cacheControl","max-age=0,public"); >> >> >> >> ResourceHandler resource_handler = new ResourceHandler(); >> resource_handler.setDirectoriesListed(true); >> resource_handler.setWelcomeFiles(new String[]{ "index.html" }); >> resource_handler.setResourceBase("."); >> resource_handler.setCacheControl("max-age=0,public"); >> >> >> HandlerList handlers = new HandlerList(); >> handlers.setHandlers(new Handler[] { context, resource_handler, new >> DefaultHandler()}); >> server.setHandler(handlers); >> >> server.start(); >> server.join(); >> } >> } >> >> >> I've tried just about everything I can think of to fix this issue, but >> nothing has worked so far. >> >> ---James >> >> >>
