无法在GlassFish-4上运行简单的servlet

时间:2014-04-12 08:52:07

标签: maven jersey servlet-3.0 glassfish-4

当我尝试运行它时,我的基于REST的简单Web服务确实遇到了问题。似乎部署成功,但是当我访问servlet时出现此错误:

WARNING:   StandardWrapperValve[MySimpleServer]: Servlet.service() for servlet MySimpleServer threw exception
    java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
        at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

我的root pom.xml非常简单,只包含这些依赖项和插件:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.8</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>MySimpleServer</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
                <version>3.1</version>
            </plugin>
        </plugins>
    </build>

web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <servlet>
        <servlet-name>MySimpleServer</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MySimpleServer</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

实际上,它今天早些时候工作,我没有对pom.xml文件做任何改动。它是Glassfish4服务器的东西吗?我做了一个干净的构建,重新部署了servlet,重新启动了GlassFish等。没有任何帮助。

1 个答案:

答案 0 :(得分:1)

当我意外混合Jersey / JAX-RS版本时,我遇到了这个问题 - IE同时拥有Jersey 1&amp; classpath上的2个库。

我无法看到pom中只有三个依赖项会发生这种情况,但我确定这种情况正在某处发生。

看着你的stacktrace,我可以看到这就是正在发生的事情。

这是javax.ws.rs-api/2.0 UriBuilder.java

118   public static UriBuilder fromUri(String uriTemplate) {
119        return newInstance().uri(uriTemplate);
120   }

这正是您所获得的 - 在UriBuilder.uri(String)上拨打line 119

查看来自UriBuilder的{​​{1}}来源中的等效行号,以及针对其他方法的Jersey 1.8评论。

所以,你以某种方式在你的类路径上得到了jax-rs 2并且它导致了这个问题。

也许你有一个共享/公共类加载器,或者是一个流浪的lib。

<强>更新

是 - glassfish附带Jersey / JAX-RS库。 见question

顺便一提 - 如果你能够,我会升级到泽西2。 希望这有帮助

威尔