2016-02-11 2 views
2

Я пытаюсь создать веб-приложение, используя Maven и Intellij Idea. Тесты отлично работают с установкой в ​​.war-файле. Но когда я пытаюсь обратиться к моему отдыху с причалом, у меня есть много таких ошибок: Ошибка создания bean-компонента с именем «org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter # 1», определенным в ресурсе ServletContext [ /WEB-INF/rest-spring.xml]: Инициализация компонента не выполнена; вложенное исключение составляет java.lang.NoClassDefFoundError: ком/fasterxml/джексон/ядро ​​/ JsonProcessingExceptionОшибка создания bean 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter # 1'

Вот остальные модули файлов: web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <servlet> 
     <servlet-name>restDispatcherServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <!--the location of the spring context configuration file--> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/rest-spring.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>restDispatcherServlet</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

покоя spring.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/jdbc 
     http://www.springframework.org/schema/jdbc/spring-jdbc.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd"> 


    <mvc:annotation-driven/> 

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 
       <value>classpath:model.properties</value> 
       <value>classpath:database.properties</value> 
       <value>classpath:automobile.properties</value> 
      </list> 
     </property> 
    </bean> 


    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 

    <jdbc:initialize-database data-source="dataSource"> 
     <jdbc:script location="classpath*:create-tables-model.sql"/> 
     <jdbc:script location="classpath*:create-tables-automobile.sql"/> 
     <jdbc:script location="classpath*:data-script.sql"/> 
    </jdbc:initialize-database> 

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
     <property name="messageConverters"> 
      <list> 
       <ref bean="jsonConverter"/> 
      </list> 
     </property> 
    </bean> 

    <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
     <property name="supportedMediaTypes" value="application/json" /> 
     <property name="prettyPrint" value="true" /> 
    </bean> 

    <bean id="modelDao" class="com.dao.ModelDaoImpl"> 
     <constructor-arg ref="dataSource" /> 
    </bean> 

    <bean id="automobileDao" class="com.dao.AutomobileDaoImpl"> 
     <constructor-arg ref="dataSource" /> 
    </bean> 

    <bean id="modelService" class="com.service.ModelServiceImpl"> 
     <property name = "modelDao" ref = "modelDao"/> 
    </bean> 
    <bean id="automobileService" class="com.service.AutomobileServiceImpl"> 
     <property name = "automobileDao" ref = "automobileDao"/> 
    </bean> 
    <context:component-scan base-package="com.rest"/> 
</beans> 

ModelRestController

package com.rest; 

import com.dto.ModelDto; 
import com.general.Model; 
import com.service.ModelService; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.http.HttpStatus; 
import org.springframework.web.bind.annotation.*; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

import java.util.List; 
/** 
* Created by kohtpojiep on 23.01.16. 
*/ 
@RestController 
public class ModelRestController 
{ 
    private static final Logger LOGGER = LogManager.getLogger(); 

    @Autowired 
    private ModelService modelService; 

    @RequestMapping(value="/models", method = RequestMethod.GET) 
    public @ResponseBody List<Model> getAllModels() 
    { 
     LOGGER.debug("Getting all models"); 
     return modelService.getAllModels(); 
    } 

    @RequestMapping(value="/model", method = RequestMethod.POST) 
    @ResponseStatus(value = HttpStatus.CREATED) 
    public @ResponseBody Integer addModel(@RequestBody Model model) 
    { 
     LOGGER.debug("Adding model modelName = {}", model.getModelName()); 
     return modelService.addModel(model); 
    } 

    @RequestMapping (value="/model/{modelId}/{modelName}", method=RequestMethod.PUT) 
    @ResponseStatus(value = HttpStatus.ACCEPTED) 
    public @ResponseBody void updateModel(@PathVariable(value="modelId") Integer modelId, 
              @PathVariable(value="modelName") String modelName) 
    { 
     LOGGER.debug("Updating model modelId = {}", modelId); 
     modelService.updateModel(new Model(modelId,modelName)); 
    } 

    @RequestMapping (value="/model/{modelName}", method = RequestMethod.DELETE) 
    @ResponseStatus(value = HttpStatus.NO_CONTENT) 
    public @ResponseBody void deleteModelByName(@PathVariable(value = "modelName") String modelName) 
    { 
     LOGGER.debug("Deleting model modelName= {}",modelName); 
     modelService.deleteModelByName(modelName); 
    } 

    @RequestMapping (value="/modelsdto", method = RequestMethod.GET) 
    @ResponseStatus(value = HttpStatus.OK) 
    public @ResponseBody 
    ModelDto getModelsDto() 
    { 
     LOGGER.debug("Getting models Dto"); 
     return modelService.getModelDto(); 
    } 

} 

AutomobileRestController

package com.rest; 

import com.dto.AutomobileDto; 
import com.general.Automobile; 
import com.service.AutomobileService; 
import org.joda.time.LocalDate; 
import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.http.HttpStatus; 
import org.springframework.web.bind.annotation.*; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

import java.util.List; 
/** 
* Created by kohtpojiep on 02.02.16. 
*/ 
@RestController 
public class AutomobileRestController 
{ 
    private static final Logger LOGGER = LogManager.getLogger(); 

    @Autowired 
    AutomobileService automobileService; 

    private static LocalDate convertToLocalDate(String date) 
    { 
     DateTimeFormatter formattedDate = DateTimeFormat.forPattern("dd/MM/yyyy"); 
     return formattedDate.parseLocalDate(date); 
    } 

    @RequestMapping(value = "/automobiles", method = RequestMethod.GET) 
    @ResponseStatus(value = HttpStatus.ACCEPTED) 
    public @ResponseBody List<Automobile> getAllAutomobiles() 
    { 
     LOGGER.debug("Getting all automobiles"); 
     return automobileService.getAllAutomobiles(); 
    } 

    @RequestMapping(value = "/automobile", method = RequestMethod.POST) 
    @ResponseStatus(value = HttpStatus.CREATED) 
    public @ResponseBody Integer addAutomobile (@RequestBody Automobile automobile) 
    { 
     LOGGER.debug("Adding automobile modelName = {}",automobile.getModelName()); 
     return automobileService.addAutomobile(automobile); 
    } 

    @RequestMapping(value = "/automobile/update", method = RequestMethod.PUT) 
    @ResponseStatus(value = HttpStatus.ACCEPTED) 
    public @ResponseBody void updateAutomobile (@RequestBody Automobile automobile) 
    { 
     LOGGER.debug("Updating automobile automobileId = {}", automobile.getAutomobileId()); 
     automobileService.updateAutomobile(automobile); 
    } 

    @RequestMapping(value = "/automobile/{automobileId}", method = RequestMethod.DELETE) 
    @ResponseStatus(value = HttpStatus.NO_CONTENT) 
    public @ResponseBody void depeteAutomobile (@PathVariable (value="automobileId") 
               Integer automobileId) 
    { 
     LOGGER.debug("Deleting automobile automobileId = {}",automobileId); 
     automobileService.deleteAutomobileById(automobileId); 
    } 

    @RequestMapping(value = "/automobiles/date-sort", method = RequestMethod.GET) 
    @ResponseStatus(value = HttpStatus.ACCEPTED) 
    public @ResponseBody List<Automobile> getAutomobilesSortedByDate (@RequestParam(value="firstDate") 
    String firstDate, @RequestParam (value="lastDate") String lastDate) 
    { 
     LOGGER.debug("Getting automobiles sorted by date:\n"); 
     return automobileService.getAutomobilesSortedByDate(
       convertToLocalDate(firstDate),convertToLocalDate(lastDate)); 
    } 

    @RequestMapping(value = "/automobilesdto", method = RequestMethod.GET) 
    @ResponseStatus(value = HttpStatus.OK) 
    public @ResponseBody 
    AutomobileDto getAutomobileDto() 
    { 
     LOGGER.debug("Getting automobile DTO"); 
     return automobileService.getAutomobileDto(); 
    } 
} 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <artifactId>usermanagement</artifactId> 
     <groupId>com.epam.brest.course2015</groupId> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>app-rest</artifactId> 
    <name>${project.artifactId}</name> 
    <packaging>war</packaging> 

    <dependencies> 
     <dependency> 
      <groupId>com.epam.brest.course2015</groupId> 
      <artifactId>app-service</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.easymock</groupId> 
      <artifactId>easymock</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>8.1.16.v20140903</version> 
       <configuration> 
        <stopPort>9091</stopPort> 
        <stopKey>STOP</stopKey> 
        <webAppConfig> 
         <contextPath>/rest</contextPath> 
         <allowDuplicateFragmentNames>true</allowDuplicateFragmentNames> 
        </webAppConfig> 
        <scanIntervalSeconds>10</scanIntervalSeconds> 
        <connectors> 
         <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> 
          <port>8081</port> 
         </connector> 
        </connectors> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 


</project> 

Я видел решения для подобных ситуаций: люди предлагают изменить варианты используемых структур и до уровня поиска компонента сканирование, но это не работает для меня.

ответ

3

Добавить зависимости к POM:

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
</dependency> 

Как вы используете зависимость управления в родительском ПОМ, нет необходимости указывать версию.

+0

Не работает. Я посмотрел на моего генерала .pom, и у меня была такая зависимость только с версией 2.4.3 (я использую ). Я попробовал сперва изменить версию до 2.7.1 с добавлением зависимости в rest .pom, затем комментирует код вообще .pom и просто добавьте зависимость в rest .pom. После каждой манипуляции я сделал «mvn clean install» в корневом проекте проекта через Terminal и попытался использовать причал: снова запустите в режиме ожидания. Может быть, необходимо указать другой файл? – KOHTPOJIEP

+0

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

+0

Но, к сожалению, это не так. Теперь у меня есть это в покое .pom: com.fasterxml.jackson.core ДЖЕКСОНА-жильный и это вообще .pom: com.fasterxml.jackson.core Джексона сердцевина 2.7.1 Прежде, чем я задал вопрос здесь, у него было , предоставленное некоторыми из решений, которые я прочитал раньше. – KOHTPOJIEP

3

Решенный! Проблема заключалась в том, что я использовал не только зависимость от jackson-core, но также джексон-данные, тип данных и аннотации, и эти зависимости имели разные версии: 2.7.1 для «core» и 2.4.3 для других. Теперь я использую одну и ту же версию для всех из них, и, таким образом, зависимость зависит. Thx для вашей помощи!)

Смежные вопросы