1

I'm develpping an Android 3.1 application with Android Spring Framework and Jackson parser. I'm not using Maven because I don't know how to use it.

I've add the following jars to my project's classpath in this order:

  • guava-11.0.2.jar
  • jackson-annotations-2.0.0.jar
  • jackson-core-2.0.0.jar
  • jackson-databind-2.0.0.jar
  • spring-android-core-1.0.0.RC1.jar
  • spring-android-rest-template-1.0.0.RC1.jar

The class that make REST request and do JSON parsing:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import com.google.common.collect.Lists;

import es.viacognita.models.Form;

public class FormSpringController
{
    public static List<Form> LoadAll()
    {
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
        HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

        String url = "http://192.168.1.128/RestServiceImpl.svc/forms/";

        MappingJacksonHttpMessageConverter messageConverter = new MappingJacksonHttpMessageConverter();
        List<HttpMessageConverter<?>> messageConverters = Lists.newArrayList();
        messageConverters.add(messageConverter);

        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setMessageConverters(messageConverters);

        ResponseEntity<Form[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, Form[].class);
        Form[] result= responseEntity.getBody();

        return Arrays.asList(result);
    }
}

Here:

MappingJacksonHttpMessageConverter messageConverter = new MappingJacksonHttpMessageConverter();

I get this error:

java.lang.VerifyError: org.springframework.http.converter.json.MappingJacksonHttpMessageConverter


Why am I getting this error?
How can I solved it?

VansFannel
  • 45,055
  • 107
  • 359
  • 626

1 Answers1

2

The problem is that Spring doesn't work with Jackson 2.0. This has been solved in the following way:

<bean id="jacksonMessageConverter"
          class="own.implementation.of.MappingJacksonHttpMessageConverter"/>

<bean class="org.springframework.web.servlet.mvc
             .annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="jacksonMessageConverter"/>
            </list>
        </property>
        <property name="requireSession" value="false"/>
    </bean>

And the own.implementation.of.MappingJacksonHttpMessageConverter is based on this:

http://www.jarvana.com/jarvana/view/org/springframework/spring-web/3.0.0.RELEASE/spring-web-3.0.0.RELEASE-sources.jar!/org/springframework/http/converter/json/MappingJacksonHttpMessageConverter.java?format=ok

But use ObjectMapper and other Jackson classes from Jackson 2.0 instead of Jackson 1.*

Eugene Retunsky
  • 13,009
  • 4
  • 52
  • 55
  • Where should I put this bean?And with what name? – Nick Robertson Nov 30 '12 at 16:31
  • which bean? no specific locations for own.implementation.of.MappingJacksonHttpMessageConverter. You can put it wherever you want to. – Eugene Retunsky Nov 30 '12 at 16:42
  • Ok, because I'm very new could you please verify if I understand it? I will create an xml as the the xml above(I don't know what name should I give here). And then, I will create a new class with the code on the link.Am I right? – Nick Robertson Nov 30 '12 at 16:47
  • 1
    I think this question is out of date now. Spring now works with Jackson2.0. See http://stackoverflow.com/questions/10420040/jackson-2-0-with-spring-3-1 – Eugene Retunsky Nov 30 '12 at 17:02