2014-09-11 14 views
16

Hallo Ich brauche meinen Frühling Boot-App in Wildfly 8.1 zu implementieren und ich erhalte die folgende Ausnahme:Frühling Stiefel Websockets in Wildfly

Verursacht durch: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer kann nicht in io.undertow.websockets.jsr.ServerWebSocketContainer unter io.undertow.servlet.core.DeploymentManagerImpl.deploy (DeploymentManagerImpl.java:219) bei org.wildfly umgewandelt werden. extension.undertow.deployment.UnderowDeploymentService.startContext (UndertowDeploymentService.java:87) bei org.wildfly.extension.undertow.deployment.UnderowDeploymentService.start (UndertowDeploymentService.java:72) bei org.jboss.msc.service.ServiceControllerImpl $ StartTask.startService (ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar: 1.2.2.Final] bei org.jboss.msc.service .ServiceControllerImpl $ StartTask.run (ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar: 1.2.2.Final] ... 3 weitere verursacht durch: java.lang.ClassCastException: org. apache.tomcat.websocket.server.WsServerContainer kann nicht in io.undertow.websockets.jsr.ServerWebSocketContainer unter io.undertow.websockets.jsr.Bootstrap $ WebSocketListener.contextInitialized (Bootstrap.java:69) bei io.underow umgesetzt werden. servlet.core.ApplicationListeners.contextInitialized (ApplicationListeners.java:173) unter io.undertow.servlet.core.DeploymentManagerImpl.deploy (DeploymentManagerImpl.java:190) ... 7 mehr

Es scheint, dass mein Setup für WebSockets und Messaging der Schuldige sein könnte? Ich habe mir das https://github.com/joshlong/boot-examples/issues/2 angesehen und keine der vorgeschlagenen Lösungen scheint für mich zu funktionieren. Hier sind die Abhängigkeiten von meinem pom:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.1.6.RELEASE</version> 
</parent> 

<dependencies> 

    <!--Testing--> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>${apache.httpcomponents.version}</version> 
    </dependency> 

    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-websocket</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-messaging</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf-spring4</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
    </dependency> 

    <!--Database--> 
    <dependency> 
     <groupId>org.hsqldb</groupId> 
     <artifactId>hsqldb</artifactId> 
     <version>2.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.1-901.jdbc4</version> 
    </dependency> 
</dependencies> 

Ich habe versucht, mit dem direkten Feder-boot-Starter-websocket als gut, aber die gleiche Sache bekommen. Hier ist meine websocket Config zu:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{ 

@Override 
public void configureMessageBroker(MessageBrokerRegistry registry) { 
    super.configureMessageBroker(registry); 
    registry.enableSimpleBroker("/ssp"); 
    registry.setApplicationDestinationPrefixes("/inc"); 
} 

@Override 
public void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/update/applications"); 
} 
} 

Vielen Dank für die Zeit, dies zu lesen nehmen. Jede Hilfe würde mir am besten gefallen. Dies ist auch meine erste Boot-Anwendung. :/

+0

ich auch gleiches Problem konfrontiert war, während den Krieg mit Gradle bauen. Ich konnte das Problem lösen, indem ich 'complishedCompile' für' spring-boot-starter-tomcat' anstelle von 'compile' verwendete. –

Antwort

3

Ich bin nicht sicher, aber Ihr POM um WebSockets so sein sollte:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-websocket</artifactId> 
</dependency> 

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-websocket</artifactId> 
    <scope>provided</scope> 
</dependency> 

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <scope>provided</scope> 
</dependency> 

spring-messaging, spring-websocket, jackson-databind, spring-boot-starter-web redundant sind.

Es gibt auch spring-boot-starter-thymeleaf.

Allerdings denke ich, die Wurzel Ihrer Ursache ist tomcat-embed-websocket.

+0

Vielen Dank für die Antwort. Ich habe meine Pom geändert, um die redundanten Deps zu eliminieren, und habe tomcat-embed-websocket hinzugefügt, bekomme aber immer noch die obige Ausnahme. Ich nehme an, der Container erwartet die Implementierung der Untow-Web-Sockets? Warum sollte meine Spring-Boot-App versuchen, Sog zu verwenden, wenn der Boot den gesamten Container steuern soll, nein? –

+0

Natürlich nein. Spring delegiert ähnlich wie JTA an die Zielcontainerimplementierung. Sie sollten den Klassenpfad Ihrer App (WEB-INF/lib?) Für die Tomcat-Jars überprüfen und sehen, welche Deps ebenfalls ausgeschlossen werden sollen. –

+0

Kunst, vielen Dank! Intellij hat meine Bibliotheken nicht synchronisiert. Noob Fehler von meiner Seite. Allerdings musste ich Spring-Messaging wieder hinzufügen. Ich glaube, ich brauchte es direkt für meine MessageMapping-Annotation in meinem Controller. Aber wie auch immer, jetzt bin ich gut. Danke noch einmal! –

6

Feder-boot-Starter-Bahn und Feder-boot-Starter-websocket enthält standardmäßig die Feder-boot-Starter-tomcat so den Kater ausschließen, wie unten

 <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <version>${spring-boot.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-websocket</artifactId> 
     <version>${spring-boot.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-tomcat</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

und undertow enthalten, stellen Sie sicher, Der Tomcat existiert nirgendwo im Klassenpfad.

31

Sie müssen ausschließen tomcat-Embed-websocket

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.apache.tomcat.embed</groupId> 
       <artifactId>tomcat-embed-websocket</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
+1

Das funktioniert nicht für mich –

1

den folgenden Befehl verwenden alle Abhängigkeiten zu finden, die spring-boot-starter-tomcat beinhaltet:

mvn dependency:tree -Dincludes=org.springframework.boot:spring-boot-starter-tomcat 

ausschließen Tomcat Starter aus allen Abhängigkeiten durch diesen Befehl aufgelistet.

Danach, müssen Sie javax.servlet-api als vorgesehene Abhängigkeit hinzuzufügen:

<dependency> 
    <artifactId>javax.servlet</artifactId> 
    <groupId>javax.servlet-api</groupId> 
    <scope>provided</scope> 
</dependency> 

Gradle Benutzer mit diesem Thema: überprüfen Sie die Kommentare zu diesem Ticket: https://github.com/spring-projects/spring-boot/issues/6166

Verwandte Themen