Java 如何在Websocket端点事件(如@OnOpen)上使用Tapestry IoC服务

Java 如何在Websocket端点事件(如@OnOpen)上使用Tapestry IoC服务,java,websocket,tapestry,Java,Websocket,Tapestry,简而言之,我想知道当我打开到以下websocket端点的连接时,如何获得消息“我们有一些魔力!”。显然,我在这里仍然缺乏一点理解 第一:成功建立连接 我有一个ServerEndpointConfig,如下所示: ... import org.apache.tapestry5.TapestryFilter; import org.apache.tapestry5.ioc.Registry; import javax.servlet.ServletContext; import javax.ser

简而言之,我想知道当我打开到以下websocket端点的连接时,如何获得消息“我们有一些魔力!”。显然,我在这里仍然缺乏一点理解

第一:成功建立连接

我有一个ServerEndpointConfig,如下所示:

...

import org.apache.tapestry5.TapestryFilter;
import org.apache.tapestry5.ioc.Registry;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;

public class MyEndpointConfig extends ServerEndpointConfig.Configurator {

    private MyService1 myService1;

    @Override
    public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest request, HandshakeResponse response) {
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        ServletContext servletContext = httpSession.getServletContext();
        Registry registry = (Registry)servletContext.getAttribute( TapestryFilter.REGISTRY_CONTEXT_NAME );
        myService1 = registry.getService(MyService1.class);
        config.getUserProperties().put("myService1", myService1);
    }

}
还有一个伟大的终点:

...
import org.apache.tapestry5.ioc.annotations.Inject;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;

@ServerEndpoint(value="/myendpoint/", configurator=MyEndpointConfig.class)
public class MyEndpoint {

    private MyService1 myService1;

    @Inject
    private MyService1 myService1_injected;

    @OnOpen
    public void onOpen( Session session, EndpointConfig config )  throws URISyntaxException {
        Map<String, Object> userProperties = config.getUserProperties();
        myService1 = (MyService1) userProperties.get("myService1");

        Object someMagic = null;
        if(myService1 != null) {
            if(!"<Proxy for myService1(my.package.MyService1)>".equals(myService1.toString())) {
                someMagic = myService1.getSomeMagic();
            } else {
                System.out.println("Thats the problem!");
            }
        } else {
            if(myService1_injected != null) {
                someMagic = myService1_injected.getSomeMagic();
            } else {
                System.out.println("Thats the problem!");
            }
        }

        if(someMagic != null) System.out.println("We have some magic!");
    }
。。。
导入org.apache.tapestry5.ioc.annotations.Inject;
导入javax.websocket.OnOpen;
导入javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value=“/myendpoint/”,configurator=MyEndpointConfig.class)
公共类MyEndpoint{
私有myservice1myservice1;
@注入
私有MyService1 MyService1_注入;
@奥诺彭
public void onOpen(会话会话,EndpointConfig配置)抛出URISyntaxException{
Map userProperties=config.getUserProperties();
myService1=(myService1)userProperties.get(“myService1”);
objectsomemagic=null;
if(myService1!=null){
if(!“”.equals(myService1.toString()){
someMagic=myService1.getSomeMagic();
}否则{
System.out.println(“这就是问题所在!”);
}
}否则{
if(myService1_注入!=null){
someMagic=myService1_injected.getSomeMagic();
}否则{
System.out.println(“这就是问题所在!”);
}
}
if(someMagic!=null)System.out.println(“我们有一些魔力!”);
}

嗯……没人知道(那么,问题出在哪里?
myService1
不应该为null,
myService1\u
应该为null——这就是您所经历的吗?我发现问题不在于服务本身,而是他应该返回的东西。服务应该通过org.a从org.apache.tapestry5.services.Session返回一个对象pache.tapestry5.services.Request。这不起作用。很难说为什么。。。