You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@shiro.apache.org by James Whetstone <ja...@comcast.net> on 2011/07/09 09:53:27 UTC

Runtime error in web app

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 SelectChannelConnector@0.0.0.0:80 
STARTING
2011-07-09 00:38:27.140:INFO::Started SslSelectChannelConnector@0.0.0.0: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