Конфликт dependency

215
27 апреля 2017, 14:06

Нужно из контроллера SpringMVC вернуть pojo объект и перехватить его на странице jsp функцией $.ajax(). Для этого в контроллере использовал аннотацию @ResponseBody

@RequestMapping(value = "/add/message", method = RequestMethod.POST)
    public @ResponseBody
    List<Message> addMessage(@RequestParam(value = "myText") String str) {
        Message message = new Message(str);
        serviceMessage.add(message);
        List<Message> list = serviceMessage.findAll(lastDate);
        return list;
    }

Код страницы

var SendMessageVar = function () {
            $.ajax({
                type: "POST",
                url: "<c:url value="/add/message"/>",
                data: ({myText: $("#textMessage").val()}),
                dataType: "json",
                success: function (result) {
                    alert(result.login);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    alert(jqXHR.status + '  ' + errorThrown);
                }
            })
        };

Пока это было MVC+ajax, всё работало, но когда начал добавлять зависимости spring-orm, hibernate-entitymanager и тд, контроллер перестал отдавать json, в функцию error: на странице приходит 500 Internal Server Error. Изначально pom.xml был таким

    <!-- @Configuration -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.2.2.RELEASE</version>
    </dependency>
    <!-- WebInitializer -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <!-- view jsp -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <!-- Jackson JSON Mapper -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.10</version>
    </dependency>

После того, как в приложение добавил работу с базой, pom.xml стал таким(весь 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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>message</groupId>
    <artifactId>message</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>
    <name>mess</name>
    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.11.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.10</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>mess</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Если в зависимости spring-webmvc обратно поставить версию с 4.3.7.RELEASE на 3.2.2.RELEASE, то проект не запускается, получаю

Caused by: java.lang.IllegalStateException: Cannot load configuration class: org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration

Как я понял это зависимости конфликтуют. Применение Spring IO Platform

   <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.spring.platform</groupId>
                <artifactId>platform-bom</artifactId>
                <version>Brussels-SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

даёт такой результат

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

Класс инициалайзер:

package ru.rambler.skanerxxl.init;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
public class WebInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(AppConfig.class);
        ctx.setServletContext(servletContext);
        ctx.refresh();
        ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
        FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter", new CharacterEncodingFilter());
        encodingFilter.setInitParameter("encoding", "UTF-8");
        encodingFilter.setInitParameter("forceEncoding", "true");
        encodingFilter.addMappingForUrlPatterns(null, true, "/*");
    }
}

Класс конфигураций:

package ru.rambler.skanerxxl.init;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
import ru.rambler.skanerxxl.db.dao.MessageDAO;
import ru.rambler.skanerxxl.db.implement.MIDAO;
import ru.rambler.skanerxxl.db.implement.MessageImplementDAO;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
@Configuration
@ComponentScan("ru.rambler.skanerxxl")
@EnableTransactionManagement
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("/");
    }
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/mess?characterEncoding=UTF-8");
        ds.setUsername("root");
        ds.setPassword("*******");
        return ds;
    }
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setShowSql(true);
        adapter.setGenerateDdl(true);
        adapter.setDatabasePlatform("org.hibernate.dialect.MySQLDialect"); 
        return adapter;
    }
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory
    (DataSource dataSource, JpaVendorAdapter jpaVendeorAdapter) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactory.setDataSource(dataSource);
        entityManagerFactory.setJpaVendorAdapter(jpaVendeorAdapter);
        entityManagerFactory.setPackagesToScan("ru.rambler.skanerxxl.db.entity");
        return entityManagerFactory;
    }
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        return new JpaTransactionManager(emf);
    }
    @Bean
    public UrlBasedViewResolver setupViewResolver() {
        UrlBasedViewResolver resolver = new UrlBasedViewResolver();
        resolver.setPrefix("/WEB-INF/pages/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        resolver.setOrder(1);
        return resolver;
    }
    @Bean
    public MessageDAO messJpaDAO() {
        return new MessageImplementDAO();
    }
    @Bean
    public MessageDAO messJdbsDAO() {
        return new MIDAO();
    }
}

Как решить эту проблему с зависимостями?

READ ALSO
Не меняется значение на выходе из функции

Не меняется значение на выходе из функции

Описано два класса в одном пекеджеВ первом описание объекта и методы, в другом эти методы должны выполняться

208
Android Studio ошибка запуска приложения на своем девайсе (Xiaomi)

Android Studio ошибка запуска приложения на своем девайсе (Xiaomi)

Пытаюсь запустить приложение на своем девайсе но постоянно выскакивает эта ошибка

399
Отличие JavavCV 2.4.x и 3.х.х [требует правки]

Отличие JavavCV 2.4.x и 3.х.х [требует правки]

Подскажите пожалуйста, имеются ли кардинальные различия между этими двумя релизами библиотеки и какой из них лучше использовать, если мне...

196
entity manager query order by select count

entity manager query order by select count

сам sql запрос:

257