On Nov 6, 2013, at 7:55 AM, Marko Sanković wrote:

> Hi,
> 
> For the last couple of hours I've been trying to inject a simple object
> into the class that is @ServerEndpoint annotated.
> 
> As stated: Tomcat implements the Java WebSocket 1.0 API defined by JSR-356.
> 
> I'm using Guice as dependency injection framework and Tomcat 7.0.47.
> 
> This is how my websocket server endpoint looks like:
> 
> ...
> import com.google.inject.Inject;
> ...
> @ServerEndpoint("/wsendpoint")
> public class WsEndpoint {
> 
>    @Inject
>    InjectedSimpleBean injectedSimpleBean;
> 
>    ...
> }
> 
> I can connect to this endpoint, send and receive messages, but
> injectedSimpleBean attribute is null (as expected).
> 
> I guess I will have to change the
> way 
> java/org/apache/tomcat/websocket/server/DefaultServerEndpointConfigurator.java
> instantiates endpoint class, the getEndpointInstace method will have to
> call something like:
> 
> injector.getInstance(clazz);
> 
> but, then again the DefaultServerEndpointConfiguration will also have be
> instantiated by the injector.
> 
> Any help would be appreciated. Thanks

Changing the Tomcat-specific class won't be necessary. You can do this with 
just the API. In your @ServerEndpoint annotation, you need to specify a 
different configuration that extends 
javax.websocket.server.ServerEndpointConfig.Configurator. Spring Framework has 
a class [1] that does just this for its DI and other bean processing. You can 
probably create a class modeled after that.

Nick

[1] 
https://github.com/spring-projects/spring-framework/blob/master/spring-websocket/src/main/java/org/springframework/web/socket/server/endpoint/SpringConfigurator.java?source=cc
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to