jersey 2 restful custom应用程序空指针异常

时间:2014-11-11 05:17:06

标签: rest maven pom.xml jersey-2.0

你好我是新手,我想在jersey 2.x上创建一个带有自定义应用程序子类的web服务但是当我加载我的webservice时,我总是得到一个奇怪的null异常 这是我的服务类

 package org.depplus.ws;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;

    @Path("/HelloWorld")
    public class HelloWorld {
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String sayPlainTextHello() {
            return "Hello Jersey";
        }

        @GET
        @Produces(MediaType.TEXT_HTML)
        public String sayHtmlHello() {
            return "<html> " + "<title>" + "Hello Jersey" + "</title>"
                + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
        }

        @GET
        @Produces(MediaType.TEXT_HTML)
        @Path("/Hello2")
            public String sayHtmlHello2() {
            return "<html> " + "<title>" + "Hello 22222222" + "</title>"
            + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
        }
    }

的web.xml:

<web-app version="3.0" 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_3_0.xsd"
        metadata-complete="false">
        <display-name>Restful Web Application</display-name>

        <servlet>
            <servlet-name>org.depplus.ws.MyApplication</servlet-name>
        </servlet>
        <servlet-mapping>
            <servlet-name>org.depplus.ws.MyApplication</servlet-name>
            <url-pattern>/rest/*</url-pattern>
        </servlet-mapping>

    </web-app>

MyApplication.java:

package org.depplus.ws;
    import java.util.HashSet;
    import java.util.Set;


    public class MyApplication extends javax.ws.rs.core.Application {
        @Override
           public Set<Class<?>> getClasses() {
              Set<Class<?>> s = new HashSet<Class<?>>();
              s.add(HelloWorld.class);
              return s;
        }

    }

当我运行“localhost:8080 / services / rest / HelloWorld”(tomcat)时出现异常

java.lang.NullPointerException
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
java.lang.ClassLoader.loadClass(ClassLoader.java:358)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1629)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:461)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:745)

理想的原因是什么?

EDIT1:Maven依赖:

<dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.2-1003-jdbc4</version>
        </dependency>     
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.13</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.3</version>
        </dependency>

    </dependencies>

EDIT2:工作web.xml版本:(在tomcat服务器中进行一些清理后工作)

<web-app metadata-complete="false" version="3.0"
 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_3_0.xsd">
 <display-name>Restful Web Application</display-name>
 <!-- <servlet>
        <servlet-name>org.depplus.ws.MyApplication</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>org.depplus.ws.MyApplication</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping> -->
 <servlet>
  <servlet-name>services</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  <init-param>
   <param-name>jersey.config.server.provider.packages</param-name>
   <param-value>org.depplus.ws</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>services</servlet-name>
  <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>/index.html</welcome-file>
 </welcome-file-list>
</web-app>

1 个答案:

答案 0 :(得分:0)

Servlet代码必须

  • Servlet名称
  • Servlet类
  • 初始化参数(可选


像这样: XML文件

<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
    version="3.0">
    <display-name>Restful Web Application</display-name>

    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>
                     com.sun.jersey.spi.container.servlet.ServletContainer
                </servlet-class>
        <init-param>
             <param-name>com.sun.jersey.config.property.packages</param-name>
             <param-value>com.stack.overflow</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

</web-app>

我已经使用此XML文件执行了正常运行的代码。 你试试吧。