Проблема с загрузкой Spring Data Rest

Я пишу службу отдыха с помощью spring-data-rest. И я столкнулся с исключением, которое я не знаю, как исправить.

У меня есть следующая конфигурация приложения

@Configuration
@ComponentScan(basePackageClasses = Application.class)
@EnableJpaRepositories
@EnableTransactionManagement
public class Application {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder().setType(H2).build();
    }

    @Bean
    public CustomerLoader loadCustomers() { 
        return new CustomerLoader();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(dataSource);
        lef.setJpaVendorAdapter(jpaVendorAdapter);
        lef.setPackagesToScan("hello");
        return lef;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(false);
        hibernateJpaVendorAdapter.setGenerateDdl(true);
        hibernateJpaVendorAdapter.setDatabase(Database.H2);
        return hibernateJpaVendorAdapter;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new JpaTransactionManager();
    }

И это мой инициализатор WebApplication

@Override
    public void onStartup(ServletContext ctx)
            throws ServletException {

        AnnotationConfigWebApplicationContext rootCtx = new AnnotationConfigWebApplicationContext();
        rootCtx.register(Application.class);

        ctx.addListener(new ContextLoaderListener(rootCtx));

        RepositoryRestExporterServlet exporter = new RepositoryRestExporterServlet();

        ServletRegistration.Dynamic reg = ctx.addServlet("exporter", exporter);
        reg.setLoadOnStartup(1);
        reg.addMapping("/*");
    }

Когда я запускаю свое приложение на сервере, я получаю следующее исключение в Servlet.init()

SEVERE: Servlet /spring-data-rest threw load() exception java.lang.NoSuchMethodError: org.springframework.data.rest.webmvc.ResourceProcessorInvokingHandlerAdapter.getReturnValueHandlers()Lorg/springframework/web/method/support/HandlerMethodReturnValueHandlerComposite; (если вам нужна полная трассировка стека, сообщите об этом)

Я думал, что это будет проблема с загрузкой класса из-за дублирования jar. Но я создаю свой проект с помощью maven и использую только один репозиторий (http://repo.spring.io/libs-milestone) с родительской версией pom spring-boot-starter-parent версии 0.5.0.M5


person Cyril Gavrailov    schedule 27.10.2013    source источник


Ответы (3)


Это может быть не что иное, как обратить мое внимание на имя, которое вы используете для пакета сущностей. Я говорю о строке «Hello», которую получает метод «lef.setPackagesToScan». Это настоящий пакет, в котором находятся ваши сущности? Если это не так, это может быть причиной вашей ошибки.

person Adrian    schedule 28.10.2013
comment
Пакеты в порядке, это было не так - person Cyril Gavrailov; 29.10.2013

Что я сделал, так это удалил maven boot-starter-parent из моего pom.xml и вручную добавил все зависимости. Я получил войну точно такого же размера, но она работала. Магия...

person Cyril Gavrailov    schedule 29.10.2013

Для меня обновление до последней версии моментального снимка решило проблему.

<dependencies>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-webmvc</artifactId>
        <version>2.0.0.BUILD-SNAPSHOT</version>
    </dependency>
</dependencies>
<repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>http://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
person Zoltan Altfatter    schedule 02.11.2013