繁体   English   中英

Camel&CXF&REST:错误找不到类java.util.ArrayList,ContentType:application / json的消息正文编写器

[英]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&amp;bindingStyle=SimpleConsumer&amp;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&amp;bindingStyle=SimpleConsumer&amp;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()));

注释后编辑:更改&amp; 对于&在您的cxfrs uri定义中, &amp; 仅在xml中需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM