2015-06-16 4 views
1

У меня есть приложение для загрузки весны. Я только что обновил мой pom-файл, чтобы использовать Spring Security 4.0.1 вместе с spring-boot-starter-parent 1.3.0.M1, и я вижу эту ошибку, когда я перешел на весеннюю загрузку 1.3.0.M1.Spring security 4.0.1 и Spring 4.2.0.RC1 stompBrokerRelayMessageHandler bean error с RabbitMQ

org.springframework.context.ApplicationContextException: Failed to start bean 'stompBrokerRelayMessageHandler'; nested exception is java.lang.NoClassDefFoundError: reactor/io/codec/Codec 
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176) 
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51) 
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346) 
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149) 
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112) 
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:825) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:140) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:524) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:678) 
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:339) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:274) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:931) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:920) 
    at org.syncServer.core.Application.main(Application.java:56) 
Caused by: java.lang.NoClassDefFoundError: reactor/io/codec/Codec 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.startInternal(StompBrokerRelayMessageHandler.java:382) 
    at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.start(AbstractBrokerMessageHandler.java:164) 
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) 
    ... 14 common frames omitted 
Caused by: java.lang.ClassNotFoundException: reactor.io.codec.Codec 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 29 common frames omitted 

здесь является реализация интерфейса WebSocketMessageBrokerConfigurer

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { 
    /// AbstractSecurityWebSocketMessageBrokerConfigurer 


    @Override 
    public void configureMessageBroker(MessageBrokerRegistry config) { 
//  config.enableSimpleBroker("/topic/", "/queue/"); 
     config.enableStompBrokerRelay("/topic/", 
             "/queue/", 
             "/sync/", 
             "/syncError/", 
             "/syncUpgrade/", 
             // the queues that starts with "/exchange/amp.direct/" will be autodelete queues 
             "/exchange/amp.direct/syncError/", 
             "/exchange/amp.direct/syncCreateAccount/" 

             ) 
     .setRelayHost("127.0.0.6") 
     .setRelayPort(61613) 
     .setClientLogin("guest") 
     .setClientPasscode("guest") 
     .setSystemLogin("guest") 
     .setSystemPasscode("guest") 
     .setSystemHeartbeatSendInterval(5000) 
     .setSystemHeartbeatReceiveInterval(4000) 
     ; 


     // this is the prefix of the app. 
     // on the controller side this will be deleted automatically 
     // thus when using 
     config.setApplicationDestinationPrefixes("/app"); 
    } 

    @Override 
    public void registerStompEndpoints(StompEndpointRegistry registry) { 
     registry.addEndpoint("/syncServerEndPoint"); 

    } 


    @Override 
    public void configureClientInboundChannel(ChannelRegistration channelRegistration) { 

    } 

    @Override 
    public void configureClientOutboundChannel(ChannelRegistration channelRegistration) { 
    } 

    @Override 
    public boolean configureMessageConverters(List<MessageConverter> arg0) { 

     return true; 
    } 

    @Override 
    public void configureWebSocketTransport(WebSocketTransportRegistration arg0) { 


     // TODO Auto-generated method stub 

    } 

    /* (non-Javadoc) 
    * @see org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer#addArgumentResolvers(java.util.List) 

    */ 
    @Override 
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> arg0) { 
     System.out.println("WEB SOCKET ARGUMENT RESOLVER"); 

    } 

    /* (non-Javadoc) 
    * @see org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer#addReturnValueHandlers(java.util.List) 
    * 
    */ 
    @Override 
    public void addReturnValueHandlers(
      List<HandlerMethodReturnValueHandler> arg0) { 
     System.out.println("WEB SOCKET RETURN VALUE HANDLER"); 

    } 

мой файл ПОМ имеет заходы:

<dependency> 
    <groupId>org.projectreactor</groupId> 
    <artifactId>reactor-core</artifactId> 
    <version>1.1.6.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.projectreactor</groupId> 
    <artifactId>reactor-net</artifactId> 
    <version>1.1.6.RELEASE</version> 
</dependency> 


<dependency> 
    <groupId>org.projectreactor</groupId> 
    <artifactId>reactor-tcp</artifactId> 
    <version>1.0.1.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.projectreactor</groupId> 
    <artifactId>reactor-spring</artifactId> 
    <version>1.0.1.RELEASE</version> 
</dependency> 

Почему я получаю эту ошибку здесь. Я использую RabitMQ в качестве брокера

Дополнение: Я видел, что если я закомментировать enableStompBrokerRelay в моем WebSocketConfig и позволяют correspondignlly простого брокера, т.е.

config.enableSimpleBroker("/topic/", "/queue/"); 

приложение начинается просто отлично.

Так что это проблема с конфигурацией. netstat -apn показывает, что мой кролик прослушивает порт 127.0.0.6 порт 61613, как ожидалось.

ТСР 0 0 127.0.0.6:61613 0.0.0.0:* СЛУШАТЬ 2318/beam.smp

полномочия гостя гостя также хорошо то я подключен к http://localhost:15672/ удостоверились, что гостевой пользователь существует и имеет админ прав.

вопрос в том, что это такое класс Reactor2StompCodec. Я не могу найти примерную рабочую конфигурацию на github

ДОБАВЛЕНИЕ 18 июня 2015 года: я не смог понять проблему, но я нашел обходной путь, т.е. spring-boot-starter-parent: 1.2.5.BUILD-SNAPSHOT и я заставил версию безопасности весны в моем файле pom через свойство, то есть spring-security.version: 4.0.2.CI-SNAPSHOT. С этой констелляцией это работает. Интересно, что если я изменю parent-boot-starter-parent на 1.3.0.BUILD-SNAPSHOT или 1.3.0.M1, это не сработает. Так что, возможно, это имеет какое-то отношение к проекту весенней загрузки. По крайней мере, у меня есть обходной путь теперь, где я могу использовать родниковую безопасность 4,0

ответ

5

нашел ответ то есть по ссылке ниже:

«Самая последняя версия Spring нуждается в реакторе 2.0»

https://github.com/spring-projects/spring-boot/issues/3459

Изменили группу реакторов ниже, и все это работает сейчас:

<dependency> 
     <groupId>io.projectreactor</groupId> 
     <artifactId>reactor-core</artifactId> 
     <version>2.0.4.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>io.projectreactor</groupId> 
     <artifactId>reactor-net</artifactId> 
    <version>2.0.4.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>io.netty</groupId> 
     <artifactId>netty-all</artifactId> 
     <version>4.0.30.Final</version> 
    </dependency>