websphere - Websphere 8.0.0.6 上的 JAX-RS 实现

标签 websphere jax-rs websphere-8

我了解 Websphere 8.0.0.6 使用 JAX-RS 1.1 的 Apache Wink 实现。

我只是想知道它使用的是哪个版本的 Apache Wink?

另外,如果我需要使用 Apache CXF,我是否只需将 CXF jar 与我的 war 捆绑在一起?

此外,Websphere 8.0.0.6 对 CDI (Weld 2.x ??)、Bean Validation (??)、JPA (??)、JAXB (??) 等使用了哪些实现。

最佳答案

WAS v8.0.0.x 使用它自己的 Wink v1.1-incubating 的修改版本。如果导航到 {WAS_HOME}/plugins,您将看到一个名为 com.ibm.ws.jaxrs.jar 的 .jar。如果您探索该工件中的 MANIFEST,您将看到 IBM 修改了 Wink v1.1-incubating 并创建了自己的 v1.1.1。你会想要使用这个版本,因为它包含了 wink-jcdi-server。否则,您无法将 EJB 注入(inject)您的 Wink 资源中,这会产生许多烦人的问题。我通常不喜欢将自己束缚在特定于供应商的解决方案中,但在这种情况下,您将希望使用 IBM 的 Wink 实现。我已经将 wink-jcdi-server 从 v1.2-incubating 反向移植到 v1.1-incubating 并取得了暂时的成功(我让 jcdi 功能正常工作,但是由于没有确定的根本原因,在几次部署之后丢失了它)。因此,省去大量的挫败感,并使用 IMB 的 Wink 实现。无论您将类加载器策略设置为 PARENT_FIRST 还是 PARENT_LAST,IBM 的 Wink 实现都将通过与 OSGi 相关的工件暴露给您的应用程序。我怀疑这是一个错误。您还需要在项目中包含 com.ibm.ws.prereq.jaxrs.jar 工件。

在 web.xml 中,使用以下配置:

<!-- Wink Servlet -->
<servlet>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.company.webservices.config.WinkApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <enabled>true</enabled>
    <async-supported>false</async-supported>
</servlet>

<!-- Wink Servlet Mapping -->
<servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/resources/*</url-pattern>
</servlet-mapping>

根据IBM's own WAS v8.0 video on JAX-RS ,您的 Application 子类将通过扩展 Application 类和 ApplicationPath 注释来自动识别。不是这种情况。您需要在 web.xml 中指定您的应用程序子类。但是,您会注意到控制台会告诉您使用了默认的 Wink 应用程序。这是错误的。您的类(class)将被选中,您需要重写 getClasses 方法并注册您的提供者、资源等。从 WAS v8.0.0.8 开始,已经观察到并彻底测试了这种行为。

您可以在 WAS 8 中尝试使用 CXF 作为替代方案。

与 Geronimo 和 TomEE 一样,WAS 构建在 Apache 产品之上。我可能是错的,但是,最后我记得,WAS v8.0 使用 Apache OpenWebBeans v1.0、Apache BVal v1.0、Apache OpenJPA v2.1.2-SNAPSHOT。我不确定 JAXB,但我认为他们使用自己的 json4j 框架。我使用 MOXy 取得了惊人的成功。

关于websphere - Websphere 8.0.0.6 上的 JAX-RS 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18237858/

相关文章:

Spring Transactions - 在未经检查的异常(RuntimeException)后防止回滚

java - 如何在 WebSphere Application Server 7.0 中池化 Java 对象?

java - 打开资源 module-info.class 的输入流时出错

java - 启用 Websphere 安全性后 Arquillian 测试停止工作

java - 将参数传递给 Jersey 资源

java - Restful : How to dynamically extend path via interface

java - 如何从服务端点接口(interface)抛出自定义故障(未在 wsdl 中声明的故障)

websphere - 让 WebSphere 监听 IPv4

websphere - 将EAR安装到WebSphere 8.5集群中而不影响应用程序可用性

java - 将 bean @Inject 到 Jersey @Path JAX-RS 资源中是否需要 bean-discovery-mode ="all"?