Tomee 1.5.2 JAX-RS与Jackson 1.9.12

zmi*_*irc 5 jax-rs java-ee jackson apache-tomee tomee

我一直在努力让Tomee 1.5.2 JAX-RS与杰克逊合作.我想我已经尝试了100种方法.
这是我的最后一次尝试:

我在conf/system.properties中添加了以下内容:

openejb.cxf.jax-rs.providers = org.codehaus.jackson.jaxrs.JacksonJsonProvider, org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 
Run Code Online (Sandbox Code Playgroud)


我在Tomee的lib文件夹中添加了:

  • 杰克逊映射器-ASL-1.9.12.jar
  • 杰克逊核心ASL-1.9.12.jar
  • 杰克逊JAXRS-1.9.12.jar


我在一个干净的NetBeans Maven Web项目中有一个简单的JAX-RS类.Mirc是一个名字和车的POJO.

...imports
@Path("")
public class MyJson {
@GET
@Produces(APPLICATION_JSON)
public Object myMeth() {
    return new Mirc("Peter", "BMW");
}
Run Code Online (Sandbox Code Playgroud)

我一直得到"没有为响应类myclass找到消息正文编写器".
我错过了什么?我怎样才能让它发挥作用?我已经检查了stackoverflow上的所有帖子但没有成功.
我真的很感激一些帮助.谢谢.

zmi*_*irc 9

由于Tomee的大力支持,我终于想出了如何做到这一点.所以......在这里!

我将首先解释如何在最新的Tomee 1.6 JAX-RS版本中实现这一目标,该版本将很快发布.顺便说一句,即使现在也很稳定.

假设您有一个Maven Java EE 6 Web应用程序项目(使用NetBeans生成一个),以下是步骤:
1.在pom.xml中添加Jackson依赖项

<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-jaxrs</artifactId>
  <version>1.9.13</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

2.在WEB-INF(包含web.xml的文件夹)中创建openejb-jar.xml,其中包含:

<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
  <pojo-deployment class-name="jaxrs-application">
    <properties>
      cxf.jaxrs.providers = org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
    </properties>
  </pojo-deployment>
</openejb-jar>
Run Code Online (Sandbox Code Playgroud)

有关此配置的更多信息,请参阅12
来自@rmannibucau的编辑:如果您使用自定义jaxrs Application子类(例如@cellicationPath),您将设置此类的限定名称而不是"jaxrs-application"(这意味着默认应用程序).
3.创建一个在没有Jackson的情况下无法工作的JAX-RS资源(例如:普通列表):

import java.util.Arrays;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/jackson")
public class Resource {

  @GET
  @Produces({MediaType.APPLICATION_JSON})
  public Object sayHelloJson() {
    return Arrays.asList(new String[]{"Peter", "pan", "Ihihi"});
  }
}
Run Code Online (Sandbox Code Playgroud)

4.部署Tomee 1.6.0 JAX-RS版本并在以下位置启动应用程序:http://localhost:8080/yourAppPath/jackson 本指南在NetBeans 7.4上使用1.6.0 2013.10.24版进行了测试.

如果您需要最新的Jackson,请使用以下内容替换之前的依赖项:

<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>2.2.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

并修改openejb-jar.xml以包含:

cxf.jaxrs.providers = com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider  
Run Code Online (Sandbox Code Playgroud)

Tomee 1.5.2
对于此版本,必须为每个资源指定提供程序,因此不在1.6.0中的应用程序级别指定.更多信息可以在这里找到.