【发布时间】:2014-01-13 09:27:47
【问题描述】:
我尝试在 Tomee 1.5.2 WebProfile 中使用 Jersey 1.18 部署一个非常简单的 RESTful Web 服务。 我的项目完全受到tomee-jersey-eclipselink 的启发
我通过删除持久性部分进一步简化的示例:Web 服务只是返回“Hello, World!”
@Path("/hello")
@RequestScoped
public class HelloService {
public HelloService() {
}
@GET
public String test() {
return "Hello, World!";
}
}
我的 POM 中的依赖项:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.18</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.18</version>
</dependency>
</dependencies>
我使用不可知的应用程序模型部署我的 Web 服务:
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;
public class JerseyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(HelloService.class);
return classes;
}
}
这是我的 web.xml:
<web-app>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.superbiz.service.JerseyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
我还在 $TOMEE/conf/system.properties 中添加了以下属性:
com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true
Tomcat 7 一切正常(在这种情况下,我用 POM 中的 javax.enterprise:cdi-api:1.1 替换了 javax:javaee-api 依赖项),但是当我尝试使用 Tomee 时,我只得到 404 HTTP 状态,没有例外,也没有额外的日志消息。
每当我从 Eclipse IDE 或命令行中使用 Maven 部署应用程序时,结果都是一样的。
注意:
- 我不想将 Tomee JAX-RS 与 Apache CXF 一起使用,我不能 升级到 Tomee 1.6。
- 我已经从 post 尝试了所有可能的方法,但没有帮助。
有什么想法吗?
【问题讨论】:
-
您是否看到一些 Jersey 日志(即在部署期间)?
-
实际上没有,我没有看到与 Jersey 相关的日志语句。我怀疑 javaee-api 是我所有问题的根源(我试图重新排序我的 POM 中的依赖项列表以重新排序类加载)。这个简约的项目应该可以帮助我在一个完全使用 CDI、JSF 等 JEE 功能的大型项目中重现和理解这个错误:所以,我不能没有对 javaee-api 的依赖。你知道一个 Jersey 类,我可以在其中放置一个相关的断点并查看发生了什么。附属问题:jersey-cdi神器是什么?对我有用吗?
-
另一个精度:我的 web.xml 只包含上面列出的 servlet 映射。还有一个精度:在实际项目中,我可以看到我的提供程序和资源类由 Jersey 很好地加载(我在这里使用 PackagesResourceConfig)。感谢您的回复。
标签: rest maven jersey jax-rs apache-tomee