相关疑难解决方法(0)

CXF:没有为类找到消息正文编写器 - 自动映射非简单资源

我正在使用CXF rest客户端,它适用于简单的数据类型(例如:字符串,整数).但是,当我尝试使用自定义对象时,我得到了这个:

Exception in thread "main" org.apache.cxf.interceptor.Fault: .No message body writer found for class : class com.company.datatype.normal.MyObject.
    at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:523)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
    at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:438)
    at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:177)
    at $Proxy13.execute(Unknown Source)
    at com.company.JaxTestClient.main(JaxTestClient.java:26)
Caused by: org.apache.cxf.jaxrs.client.ClientWebApplicationException: .No message body writer found for class : class com.company.datatype.normal.MyObject.
    at org.apache.cxf.jaxrs.client.AbstractClient.reportMessageHandlerProblem(AbstractClient.java:491)
    at org.apache.cxf.jaxrs.client.AbstractClient.writeBody(AbstractClient.java:401)
    at org.apache.cxf.jaxrs.client.ClientProxyImpl$BodyWriter.handleMessage(ClientProxyImpl.java:515)
    ... 5 more
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

JaxExample jaxExample = JAXRSClientFactory.create( "http://localhost:8111/", JaxExample.class );
MyObject before = ...
MyObject after = jaxExample.execute( before );
Run Code Online (Sandbox Code Playgroud)

这是界面中的方法:

@POST
@Path( "execute" )
@Produces( "application/json" )
MyObject execute( …
Run Code Online (Sandbox Code Playgroud)

java web-services cxf

39
推荐指数
2
解决办法
10万
查看次数

无法在Jersey 2.0中为Jackson启用基于POJO的JSON绑定支持

我正在使用Jersey来生成JSON(通过Jackson的POJO映射)和Jetty(从main方法开始).
它适用于Jersey 1.x:

ServletHolder sh = new ServletHolder(ServletContainer.class);
sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
                        "com.sun.jersey.api.core.PackagesResourceConfig");
sh.setInitParameter("com.sun.jersey.config.property.packages", "service");
sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
...
context.addServlet(sh, "/rest/*");
Server server = new Server(8080);
server.setHandler(context);
server.start();
Run Code Online (Sandbox Code Playgroud)

现在我将我的项目迁移到Jersey 2.0并且无法在其中启用基于POJO的JSON绑定,我得到以下内容: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class business.entity.ExampleEntity, genericType=class business.entity.ExampleEntity.

显然,com.sun.jersey.api.json.POJOMappingFeature泽西不再有效org.glassfish

文件说以下内容:

为了使用Jackson作为您的JSON(JAXB/POJO)提供程序,您需要在Configurable(客户端/服务器)中为ObjectMapper(如果需要)注册JacksonFeature和ContextResolver.

但在我的案例中,我无法弄清楚如何正确地做到这一点.

我为这个问题创建了一个小项目:

分支master- 泽西岛1.17.1的工作示例;

分支jersey-2.0-migration- 没有工作尝试迁移到Jersey 2.0 - 测试失败 ;

分支jersey-2.0-migrate-client-only- 非工作尝试使用泽西岛客户端2.0与工作泽西服务器1.17.1 - 测试失败.

问题是:如何在Jersey 2.0中启用基于POJO的JSON绑定

java jersey jackson

6
推荐指数
1
解决办法
9185
查看次数

标签 统计

java ×2

cxf ×1

jackson ×1

jersey ×1

web-services ×1