异常是java.lang.NoSuchMethodError:org / codehaus / jackson / map / ObjectMapper.getTypeFactory()Lorg / codehaus / jackson / map / type / TypeFactory

时间:2017-11-20 11:27:13

标签: java spring glassfish

在此代码中,当我们使用restTemplate.exchange()调用服务时,它会在下面给出错误。我使用的是Spring framework 4.0.1。

当我使用Glassfish运行它时,它运行正常,但是当我在Webspare 8.5.5上部署我的服务时,它会出错。

我的代码

package com.org.controller;

import com.ibm.json.java.JSONObject;
import java.util.ArrayList;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.org.modal.Student;
import java.io.IOException;
import javax.ws.rs.core.MediaType;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;

import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@EnableWebMvc
@Controller
public class zSpringWebService {

    @ResponseBody
    @RequestMapping(value="/student",method = RequestMethod.GET , produces = MediaType.APPLICATION_JSON )
    public ArrayList<Student> getStudentList()
    {
        Student student1 = new Student();
        student1.setName("Satish");

        Student student2 = new Student();
        student2.setName("Praveen");

        ArrayList<Student> studentList = new ArrayList<Student>();
        studentList.add(student1);
        studentList.add(student2);

        return studentList;
    }

    @ResponseBody
    @RequestMapping(value="/student/{name}",method = RequestMethod.GET )
    public JSONObject getStudentListWithParams(@PathVariable("name") String name) throws IOException
    {
                JSONObject json = new JSONObject();
        Student student1 = new Student();
        student1.setName(name);
            String readJsonFromUrl = new zSpringWebService().readJsonFromUrl();

        Student student2 = new Student();
        student2.setName("Praveen");

        ArrayList<Student> studentList = new ArrayList<Student>();
        studentList.add(student1);
        studentList.add(student2);

                json.put("Name1", name);
                json.put("Name", "Test");
                json.put("readJsonFromUrl", readJsonFromUrl);
//      return studentList;
                return json;
    }


        public String readJsonFromUrl() throws IOException {
//        UserDetailsBean userDetailsBean=null;
        RestTemplate restTemplate = new RestTemplate();
                HttpHeaders headers = new HttpHeaders();
                headers.set("Content/Type", "application/json");
                HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
                ResponseEntity<String> response = restTemplate.exchange("http://localhost:8080/student/", HttpMethod.GET, entity, String.class);
                System.out.println("exchange " + response);
                if (!(response.getStatusCode().toString().equals("200"))) {
                    throw new RuntimeException("Failed : HTTP error code : "
                            + response.getStatusCode());
                }       
                return response.toString();
            }


            public static void main(String[] args) throws IOException {
        new zSpringWebService().readJsonFromUrl();
    }
}      

错误是:

com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0014E: Uncaught service() exception root cause spring: org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: org/codehaus/jackson/map/ObjectMapper.getTypeFactory()Lorg/codehaus/jackson/map/type/TypeFactory;
            at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1284)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:965)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
            at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:575)
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
            at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1237)
            at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:781)
            at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:480)
            at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
            at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1114)
            at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3928)
            at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
            at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1007)
            at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
            at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200)
            at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463)
            at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530)
            at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316)
            at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:287)
            at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
            at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
            at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
            at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
            at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
            at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
            at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
            at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
            at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
            at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1881)
        Caused by: java.lang.NoSuchMethodError: org/codehaus/jackson/map/ObjectMapper.getTypeFactory()Lorg/codehaus/jackson/map/type/TypeFactory;
            at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.getJavaType(MappingJacksonHttpMessageConverter.java:236)
            at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.canRead(MappingJacksonHttpMessageConverter.java:151)
            at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.canRead(MappingJacksonHttpMessageConverter.java:146)
            at org.springframework.web.client.RestTemplate$AcceptHeaderRequestCallback.doWithRequest(RestTemplate.java:653)
            at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:719)
            at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:539)
            at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:502)
            at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:444)
            at com.org.controller.zSpringWebService.readJsonFromUrl(zSpringWebService.java:92)
            at com.org.controller.zSpringWebService.getStudentListWithParams(zSpringWebService.java:51)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
            at java.lang.reflect.Method.invoke(Method.java:611)
            at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
            at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
            at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690)
            at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
            ... 30 more

1 个答案:

答案 0 :(得分:0)

你的问题是spring版本和jackson版本不兼容, 我使用Spring版本4.1.6.RELEASE和jackson版本2.4.4工作正常。