У меня есть приложение для загрузки весны. Я только что обновил мой 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