[英]Camel & CXF & REST: ERROR No message body writer has been found for class java.util.ArrayList, ContentType: application/json
在我的Spring配置文件中:
<bean id="jacksonJsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" />
<bean id="restJacksonProviderList" class="java.util.ArrayList">
<constructor-arg>
<list>
<ref bean="jacksonJsonProvider"/>
</list>
</constructor-arg>
</bean>
//......
<route id="RestMyRoute">
<from id="RestRequest" uri="cxfrs:/rest/MyService?resourceClasses=com.myself.services.MyService&bindingStyle=SimpleConsumer&providers=#restJacksonProviderList" />
<to uri="direct:doRoute" />
</route>
服务界面:
@GET
@Path("/my/something/{id}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@WebMethod
@WebResult(name = "getSomethingResponse")
public List<MySomething> getSomething(
@PathParam("id") @WebParam(name = "id") String id);
上面的代码有效! 我可以将get请求发送到URl并得到JSON响应。
现在,我做了一个小小的更改:我不是通过XML配置定义Web服务的URL(和路由),而是通过Java代码定义它们:
public class MyRoute extends RouteBuilder {
private String uriRest = "cxfrs:/rest/MyService?resourceClasses=com.myself.services.MyService&bindingStyle=SimpleConsumer&providers=#restJacksonProviderList";
@Override
public void configure() throws Exception {
from(uriRest).
to("log:input").
to("direct:doRoute").
to("log:output");
}
}
当我点击Web服务URL时,出现500 Internal Server Error
并且在日志(Tomcat)中看到JAXRSUtils ERROR No message body writer has been found for class java.util.ArrayList, ContentType: application/json
实际上,调试器告诉我,通过Java代码定义URI是可以识别的,因为我确实点击了路由内的代码。
我在这里的许多答案中都看到了此错误,基本上他们说要添加一个Json提供程序并将其分配给CXF端点。
在我看来,这就是我所做的。 但这行不通。
知道我在这里做错了吗?
正如peeskillet所说,这是因为没有以restJacksonProviderList名称注册的提供者列表。 您可以像这样获得JndiContext并在routebuilder的configure方法中将列表绑定到它:
JndiContext registry = (JndiRegistry) context.getRegistry();
registry.bind("restJacksonProviderList", Arrays.asList(new JacksonJsonProvider()));
注释后编辑:更改&
对于&
在您的cxfrs uri定义中, &
仅在xml中需要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.