【发布时间】:2015-03-18 22:44:15
【问题描述】:
所有,我有一个小的 REST 项目来学习 REST。以下是为 Jersey 和 Javax 提供 jar 的 pom.xml。我使用的是 Tomcat 8。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
</dependencies>
当我尝试运行任何 Web 服务时,我收到以下错误。
我用谷歌搜索了它,在大多数地方,它说这是一个 maven 依赖/冲突问题的赌注。泽西岛和 JAX-RS API 罐子。我无法找出哪些罐子可能会发生冲突。
请注意,我不久前运行这些服务没有问题...当我更换笔记本电脑时开始收到此错误...升级到 Tomcat 8,安装了 Eclipse Luna,仍然在 Java 7 上。
我无法弄清楚可能出了什么问题……如果您有任何想法,请告诉我。非常感谢任何帮助。
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
: Servlet.service() for servlet [Jersey Servlet] in context with path [/restfulAPI] threw exception [Servlet execution threw an exception] with root cause
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:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
【问题讨论】:
-
摆脱 Java EE api jar。它使用 JAX-RS 2。Jersey 1,使用 JAX-RS 1。您可能正在尝试使用一些 JAX-RS 2 API,而 Jersey 1 不支持它。 Jersey 1 已经引入了 jsr311,它是 JAX-RS 1 api jar。此外,可能不是问题,但不要混合泽西版本。 1.9 和 1.10 差别不大,但没有理由混合使用。
-
删除了 Java EE api jar 并添加了 javax.ws.rs::jsr311-api::1.1.1 jar。上述经验。走了。使用 jersey-server 1.10 jar 时,得到:java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer。把 jersey-server::1.9 jar 放回去,它就可以正常工作了。
-
是的,对不起,我想从 1.10 开始,servlet 容器在一个新的
jersey-servletjar 中
标签: java web-services rest maven tomcat