杰克逊Jaxb Json与Apache CXf

时间:2011-09-14 13:07:14

标签: json jaxb cxf jackson

我在Apache CXF的REST项目中使用Jackson Jaxb JSON

JacksonJaxb版。 1.7.0 Apache CXF 2.3.1

我正在使用以下代码从我的方法返回。

    @GET
    @Consumes({ "application/json", "application/xml", "text/xml" })
    @Path("/job/autosuggest")
    @Override
    public Response getSuggestions(String searchField, Integer resPerPage, String typeCont)
    {   
        List<String> respo = new ArrayList<String>();
        respo.add("Atish");
        respo.add("Narlawar");
        respo.add("India");

        return Response.ok(respo).build();
}

现在问题出现了,当我在jetty上编译并运行代码时,我遇到了

DEBUG o.s.b.f.s.DefaultListableBeanFactory [] Finished creating instance of bean 'org.apache.cxf.phase.PhaseManager'
org.codehaus.jackson.map.JsonMappingException: Incompatible types: declared root type ([simple type, class javax.ws.rs.core.Response]) vs java.util.ArrayList

这不是特定于数组或包装器,但是任何对象如果我在Response.ok(对象)中传递而不是String则无法解析。

我的配置是

  <util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
        <entry key="http://services.institute.com" value=""/>
        <entry key="http://cxf.apache.org/bindings/xformat" value="cxf"/>
    </util:map>

    <bean id="jsonInputFactory" class="org.codehaus.jettison.mapped.MappedXMLInputFactory">
        <constructor-arg ref="jsonNamespaceMap"/>
    </bean>

    <bean id="jsonOutputFactory" class="org.codehaus.jettison.mapped.MappedXMLOutputFactory">
        <constructor-arg ref="jsonNamespaceMap"/>
    </bean>

    <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>

    <jaxrs:server id="jobsearch" address="/">
        <jaxrs:serviceBeans>
            <ref bean="jobSearchService" />
        </jaxrs:serviceBeans>
        <jaxrs:extensionMappings>
            <entry key="text" value="text/xml"/>
            <entry key="xml" value="application/xml"/>
            <entry key="json" value="application/json"/>
        </jaxrs:extensionMappings>
        <jaxrs:languageMappings/>
        <jaxrs:properties>
            <entry key="javax.xml.stream.XMLInputFactory">
                <ref bean="jsonInputFactory"/>
            </entry>
            <entry key="javax.xml.stream.XMLOutputFactory">
                <ref bean="jsonOutputFactory"/>
            </entry>
        </jaxrs:properties>
        <jaxrs:providers>         
            <ref bean="jsonProvider"/>     
        </jaxrs:providers> 
    </jaxrs:server>

</beans>

我不知道如何处理这个问题。我已经失去了半天才得到一些解决方法。任何帮助将不胜感激。

提前致谢!

1 个答案:

答案 0 :(得分:3)

最后我得到了答案。

问题在于版本本身。 JacksonJaxb报告了1.7.0中的错误。

我将版本更新为更高...在我的情况下它是1.8.5并且它已得到修复。

希望这有帮助。

由于 Atish

相关问题