首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在GlassFish-4上运行简单servlet

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

Stack Overflow用户
提问于 2014-04-12 16:52:07
回答 1查看 438关注 0票数 1

我的简单的基于REST的when服务在我尝试运行它时确实遇到了问题。看起来部署成功了,但是当我访问servlet时,我得到了这个错误:

代码语言:javascript
复制
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)

我的根pom.xml非常简单,只包含以下依赖项和插件:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<?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等等。

EN

回答 1

Stack Overflow用户

发布于 2014-04-12 17:54:41

当我意外地混合了Jersey / JAX-RS版本时,我就遇到过这个问题-- IE在classpath上同时拥有Jersey 1和2库。

pom中只有三个依赖项的情况下,我看不出这是如何发生的,但我非常确定这是在某个地方发生的。

看看你的stacktrace,我可以看到这是怎么回事。

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

代码语言:javascript
复制
118   public static UriBuilder fromUri(String uriTemplate) {
119        return newInstance().uri(uriTemplate);
120   }

这就是你所得到的--在line 119上调用UriBuilder.uri(String)

查看来自Jersey 1.8UriBuilder源代码中的等效行号,这是另一种方法的Javadoc注释。

所以,不知何故,你的类路径上有jax-rs2,它导致了这个问题。

也许你把它放在一个共享的/公共的类加载器上,或者放在一个零散的库中。

更新

是的- glassfish附带Jersey / JAX-RS库。查看此question

顺便说一句--如果你能做到,我会升级到Jersey 2。

将要

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23028260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档