AbstractMethodError
are thrown when an application tries to call an abstract method.
uri
is an abstract method in UriBuilder
, so you need an implementation of this. This method (with String
parameter) is from version 2.0
of JAX-RS specification.
You're trying to use JAX-RS 2.0 with Jersey 1.*. Instead, you need to use Jersey 2.* that implements JAX-RS 2.0 and contains an implementation to uri
method.
In your pom.xml
you may remove these dependencies:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0-m12</version>
</dependency>
And use these dependencies:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.17</version>
</dependency>
Using this, uri
method is implemented in JerseyUriBuilder
class from jersey-common
.
EDIT:
You need to change, in your web.xml
, servlet com.sun.jersey.spi.container.servlet.ServletContainer
to org.glassfish.jersey.servlet.ServletContainer
and init-param
from com.sun.jersey.config.property.packages
to jersey.config.server.provider.packages
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…