2015-01-17 16 views
5

मैं वसंत के साथ एक वेबसाइकिल एंडपॉइंट बनाने की कोशिश कर रहा हूं। लेकिन जब भी मैं ग्राहक छोर से कनेक्ट करने के लिए कोशिश कर रहा हूँ, मैं 404. मिल मैं भीस्प्रिंग वेबस्केट 404 नहीं मिला

@ServerEndpoint(value = "/websocket") 

जो अच्छा काम करता है के साथ एक जावा कार्यान्वयन है। नीचे मेरे वसंत कार्यान्वयन का कोड है जो काम नहीं कर रहा है। मुझसे यहां क्या गलत हो रहा है?

package com.tlab.endpoint; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.socket.WebSocketHandler; 
import org.springframework.web.socket.config.annotation.EnableWebSocket; 
import org.springframework.web.socket.config.annotation.WebSocketConfigurer; 
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; 

@Configuration 
@EnableWebSocket 
public class WebSocketConfig implements WebSocketConfigurer { 

    @Override 
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
     registry.addHandler(socketHandler(),"/socket");; 
    } 

    @Bean 
    public WebSocketHandler socketHandler() { 
     return new SocketHandler(); 
    } 

} 
नीचे

हैंडलर

package com.tlab.endpoint; 

import org.springframework.web.socket.TextMessage; 
import org.springframework.web.socket.WebSocketSession; 
import org.springframework.web.socket.handler.TextWebSocketHandler; 


public class SocketHandler extends TextWebSocketHandler { 

    @Override 
    public void handleTextMessage(WebSocketSession session, TextMessage message) { 

    } 

} 

क्लाइंट पक्ष कोड मैंने कोशिश की सभी/बाकी/सॉकेट के साथ हैंडलर

var websocket = new WebSocket("ws://localhost:8080/tsim/socket"); 
var websocket = new WebSocket("ws://localhost:8080/tsim/socket"); 
var websocket = new WebSocket("ws://localhost:8080/tsim/rest/socket"); 

में/सॉकेट के साथ संभव संयोजन

diff में है हैंडलर में

var websocket = new WebSocket("ws://localhost:8080/tsim/rest/socket"); 

जहां tsim मेरा संदर्भ है। सब कुछ नीचे त्रुटि

WebSocket connection to 'ws://localhost:8080/tsim/socket' failed: Error during WebSocket handshake: Unexpected response code: 404. 

मुझे कोई संकलन और तैनाती त्रुटियां नहीं मिलीं। मैंने टॉमकैट 8.0 का उपयोग किया और नीचे प्रेषक सर्वलेट कॉन्फ़िगरेशन है।

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:int="http://www.springframework.org/schema/integration" 
     xmlns:int-ftp="http://www.springframework.org/schema/integration/ftp" 
     xmlns:batch="http://www.springframework.org/schema/batch" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:websocket="http://www.springframework.org/schema/websocket" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.2.xsd 
      http://www.springframework.org/schema/integration/ftp http://www.springframework.org/schema/integration/ftp/spring-integration-ftp.xsd 
      http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd 
      http://www.springframework.org/schema/websocket 
     http://www.springframework.org/schema/websocket/spring-websocket.xsd" 
     > 

    <import resource="classpath*:web-db-spring.xml"/> 

    <context:component-scan base-package="com.traderslab.nseb,com.tlab.endpoint"/> 

    <aop:aspectj-autoproxy/> 

    <mvc:annotation-driven> 
     <mvc:message-converters> 
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
       <property name="prefixJson" value="false"/> 
       <property name="supportedMediaTypes" value="application/json"/> 
       <property name="objectMapper"> 
        <bean class="com.fasterxml.jackson.databind.ObjectMapper"> 
         <property name="serializationInclusion" value="NON_NULL"/> 
        </bean> 
       </property> 
      </bean> 
      <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/> 
     </mvc:message-converters> 
    </mvc:annotation-driven> 

    <mvc:default-servlet-handler/> 

</beans> 

नीचे मेरी web.xml

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/classes/dispatcher-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/rest/</url-pattern> 
</servlet-mapping> 
+0

आप 'दिखाने ws: // स्थानीय होस्ट: 8080/Tsim/अपने उदाहरण में socket' लेकिन त्रुटि संदेश दिखाता है 'ws: // localhost: 8080/ट्रेडसिम/सॉकेट'। यह 'tsim' या 'ट्रेडसिम' है? – Bogdan

+0

मैंने अलग-अलग कोशिश की .. वह भाग जो मैंने कवर किया है उसे इसे सैम या ट्रेडसिम के रूप में ले जाना है .. भ्रम से बचने के लिए मैं इसे संपादित करूंगा – anandaravindan

उत्तर

2

मैं अंत में इस सवाल का जवाब अपने आप को पाया है। चूंकि इसे सामान्य http अनुरोध के रूप में प्रेषक सर्वलेट द्वारा नियंत्रित किया जाता है। मैं WebSocketConfig वर्ग

@Configuration 
@EnableWebSocket 
@Controller 
public class WebSocketConfig implements WebSocketConfigurer 
+0

मैं वसंत बूट का उपयोग कर रहा हूं और एक ही समस्या है, हालांकि @Controller को WebSocketConfig don ' टी मदद मुझे आश्चर्यजनक रूप से 403 मिल रहा है। क्या आप मदद कर सकते हैं? – Greyshack

+0

एक फिक्स मिला। यदि आप अपने ब्राउज़र के साथ वेबसाईट का परीक्षण करना चाहते हैं तो आपको रजिस्ट्री.डहैंडलर (सॉकेटहैंडलर), "/ सॉकेट") जोड़ने की आवश्यकता है। SetAllowedOrigins ("*"); – Greyshack

0

मैं अपने मामले को @Controller टिप्पणी जोड़ने के लिए की जरूरत है, समस्या डिस्पैचर सर्वलेट मानचित्रण में था। मैं केवल एक * .mvc मानचित्रण था, और WebSocket यह बिना किया गया था, तो मैं करने के लिए बदलना पड़ा:

<servlet-mapping> 
    <servlet-name>dispatcherServlet</servlet-name> 
    <url-pattern>*.mvc</url-pattern> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
संबंधित मुद्दे