我的简单的基于REST的when服务在我尝试运行它时确实遇到了问题。看起来部署成功了,但是当我访问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)我的根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等等。
发布于 2014-04-12 17:54:41
当我意外地混合了Jersey / JAX-RS版本时,我就遇到过这个问题-- IE在classpath上同时拥有Jersey 1和2库。
在pom中只有三个依赖项的情况下,我看不出这是如何发生的,但我非常确定这是在某个地方发生的。
看看你的stacktrace,我可以看到这是怎么回事。
这是javax.ws.rs-api/2.0 UriBuilder.java
118 public static UriBuilder fromUri(String uriTemplate) {
119 return newInstance().uri(uriTemplate);
120 }这就是你所得到的--在line 119上调用UriBuilder.uri(String)。
查看来自Jersey 1.8的UriBuilder源代码中的等效行号,这是另一种方法的Javadoc注释。
所以,不知何故,你的类路径上有jax-rs2,它导致了这个问题。
也许你把它放在一个共享的/公共的类加载器上,或者放在一个零散的库中。
更新
是的- glassfish附带Jersey / JAX-RS库。查看此question
顺便说一句--如果你能做到,我会升级到Jersey 2。
将要
https://stackoverflow.com/questions/23028260
复制相似问题