2011-09-14 73 views
3

我在我与Apache CXF杰克逊JAXB的Json与Apache CXF

JacksonJaxb版本REST项目中使用杰克逊JAXB JSON。 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(); 
} 

现在问题来了,当我编译和运行在码头的代码,我被卡住与

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(对象)无法解析。

我的配置是

<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> 

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

在此先感谢!

回答

3

最后我得到了答案。

问题出在版本本身。 JacksonJaxb在1.7.0中报告了bug。

我更新版本更高...在我的情况下,它是1.8.5,它得到了修复。

希望这会有所帮助。

谢谢 Atish