Wol*_*ahl 4 jax-rs jersey maven
以下问题讨论了Jersey与JAX-RS规范之间的依赖关系理论:
我假设我可以添加依赖项:
<!-- javax.ws.rs.core e.g. Request -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
到我的API定义maven项目并使用Jersey/Grizzly来实现.
<jersey.version>1.15</jersey.version>
<grizzly.version>2.2.20</grizzly.version>
Run Code Online (Sandbox Code Playgroud)
与此假设相反,我收到以下错误消息:
15.02.2013 08:41:25 org.glassfish.grizzly.http.server.HttpServerFilter handleRead
WARNUNG: Unexpected error
java.lang.IncompatibleClassChangeError: Class javax.ws.rs.core.Response$Status does not implement the requested interface javax.ws.rs.core.Response$StatusType
at com.sun.jersey.spi.container.ContainerResponse.getStatus(ContainerResponse.java:571)
Run Code Online (Sandbox Code Playgroud)
什么是应该与Jersey 1.15一起使用的正确的JAX-RS API依赖?
我希望以一种可以由任何其他符合JAX-RS的库替换实现的方式来实现.
问题是你的JSR 311 API依赖是版本1.0,而Jersey 1.15是JSR 311版本1.1实现.比较http://jsr311.java.net/nonav/releases/1.0/javax/ws/rs/core/Response.Status.html和http://jsr311.java.net/nonav/releases/1.1/javax/ws /rs/core/Response.Status.html,你会看到后者实现了ResponseType
接口,但前者没有.
您应该能够在构建时类路径上获得JSR 311版本1.1.1 API类文件,方法是声明:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
事实上,球衣核心pom.xml
已经做到了 - 上面只是http://repo1.maven.org/maven2/com/sun/jersey/jersey-core/1.15/jersey-core-1.15.pom中的第一个依赖..
在像Glassfish这样的容器中,你现在已经完成了,因为容器将负责在运行时为你提供API类(这就是为什么在jersey自己的Maven POM中的范围provided
不是compile
).然而,对于灰熊Web容器,很可能你需要确保API类在运行时可用(通过使用<dependency>
上述声明,但改变<scope>
从provided
到compile
会做到这一点).
归档时间: |
|
查看次数: |
16386 次 |
最近记录: |