2013-08-27 5 views
2

Я новичок в веб-сервисе. Я пытаюсь использовать веб-сервис jax.ws.. с jersey и spring. Когда я пытаюсь отправить запрос с помощью Chrome Post Client или CURL в Windows, происходит следующая трассировка стека.AbstractMethodError in Rest Webservice

SEVERE: Servlet.service() for servlet [jersey-serlvet] in context with path [/rest] threw exception [Servlet execution threw an exception] with root cause 
java.lang.AbstractMethodError 
at org.codehaus.jackson.map.AnnotationIntrospector$Pair.findDeserializer(AnnotationIntrospector.java:1335) 
at org.codehaus.jackson.map.deser.BasicDeserializerFactory.findDeserializerFromAnnotation(BasicDeserializerFactory.java:675) 
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:535) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:432) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:341) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:321) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:167) 
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findTypedValueDeserializer(StdDeserializerProvider.java:188) 
at org.codehaus.jackson.map.ObjectMapper._findRootDeserializer(ObjectMapper.java:2820) 
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2690) 
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1308) 
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419) 
.............................. 

Ниже приводится код моего примера:

@Path("/loginPoint") 
@Service 
public class UserService { 

@Resource(name= "commanUserService") 
private CommanUserService commanUserService; 

@POST 
@Path("/login") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public Response login(LoginRequest request){ 
    System.out.println("Hello In web Services >>>>>>>>>>>>>>>>>>>>>>>>> "); 
    LoginResponse response = commanUserService.getUserloginInformation(request); 
    return Response.status(Status.OK).entity(response).build(); 
} 
} 

код LoginRequest.java файла:

@XmlRootElement(name="loginRequest") 
public class LoginRequest { 
private String userName; 
private String password; 

@XmlElement("userName") 
public String getUserName() { 
    return userName; 
} 
public void setUserName(String userName) { 
    this.userName = userName; 
} 

@XmlElement("password") 
public String getPassword() { 
    return password; 
} 
public void setPassword(String password) { 
    this.password = password; 
} 
} 

Я полагаю, что проблема заключается в выстраивании JSON параметров запроса с LoginRequest объектом, но я не уверен.

+1

AbstractMethodError часто указывает на несоответствие версии. У вас есть несколько банок Джексона? Можете ли вы открыть источник этого последнего вызова в стеке и посмотреть, что он будет вызывать? – Pace

+0

да, у меня есть несколько банок Jackson в моем проекте с разными версиями. но теперь я путаю, какую зависимость мне нужно удалить? –

+1

Если вы используете Maven, иногда помогает зависание: плагин дерева. Раздел [dependencyManagement] (http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management) также позволит вам указать одну версию, которая переопределит все транзитивные зависимости. – Pace

ответ

5

Проблема была несоответствием между версиями Джексона.

3

При использовании зависимости jackson-core-asl с jackson-mapper-asl при выборе той же версии.

<dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-core-asl</artifactId> 
     <version>${jackson.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>${jackson.version}</version> 
    </dependency> 
2

У меня такая же проблема и я решил. этот вопрос с совместимостью версии между Jersy (Jersy-JSON, Jersy-сервера) и джексон (ДЖЕКСОНА-ядро-над уровнем моря, джексон-картостроитель- над уровнем моря) банок.

поэтому, пожалуйста, используйте совместимые версии, такие как jersy 1.8 с jackson 1.8.1.