2011-09-14 6 views
3

J'utilise Jackson JAXB JSON dans mon projet REST avec Apache CXFJackson JAXB JSON avec Apache CXF

version JacksonJaxb. 1.7.0 Apache CXF 2.3.1

J'utilise le code suivant pour revenir de ma méthode.

@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(); 
} 

Maintenant question vient quand je compiler et exécuter le code sur la jetée, je suis bloqué avec

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 

Ce n'est pas particulier à un tableau ou un emballage, mais un objet Si je passe plutôt que de chaîne dans Response.ok (objet) ne parvient pas à analyser.

Ma configuration est

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

Je ne sais pas comment procéder sur cette question. J'ai déjà perdu 1/2 jour pour obtenir une solution de contournement. Toute aide serait appréciée.

Merci d'avance!

Répondre

3

Enfin, j'ai eu la réponse.

Le problème est avec la version elle-même. JacksonJaxb a signalé un bug dans la version 1.7.0.

J'ai mis à jour la version à plus haut ... dans mon cas, il est 1.8.5 et il a été corrigé.

Espérons que cela aide.

Merci Atis