由于websocket部署异常,Tomcat 7.0.50未能初始化

由于websocket部署异常,Tomcat 7.0.50未能初始化,websocket,tomcat7,endpoint,Websocket,Tomcat7,Endpoint,我正在尝试在Tomcat7.0.50上部署WebSocket。下面是我的代码 @ServerEndpoint(value="/ws/fileuploadtracker/") public class FileUploadTrackerEndPoint{ @OnOpen public void onOpen(Session session) { ..... } @OnMessage public void onMessage(Session session, String msg)

我正在尝试在Tomcat7.0.50上部署WebSocket。下面是我的代码

 @ServerEndpoint(value="/ws/fileuploadtracker/")
 public class FileUploadTrackerEndPoint{

@OnOpen
public void onOpen(Session session) {
    .....
}
@OnMessage
public void onMessage(Session session, String msg) {
    try {
        session.getBasicRemote().sendText(msg);
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}
} 我从oracles关于javaee的websocket示例的注释中从以下链接中选择了上述代码: 我的tomcat无法启动,出现以下异常:

   SEVERE: Error during ServletContainerInitializer processing
   javax.servlet.ServletException: javax.websocket.DeploymentException: A parameter of          type [interface javax.websocket.Session] was found on method[onOpen] of class [java.lang.reflect.Method] that did not have a @PathParam annotation
at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:146)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5444)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
 Caused by: javax.websocket.DeploymentException: A parameter of type [interface javax.websocket.Session] was found on method[onOpen] of class [java.lang.reflect.Method] that did not have a @PathParam annotation
at org.apache.tomcat.websocket.pojo.PojoMethodMapping.getPathParams(PojoMethodMapping.java:233)
at org.apache.tomcat.websocket.pojo.PojoMethodMapping.<init>(PojoMethodMapping.java:122)
at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:239)
at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:143)
... 8 more
严重:ServletContainerInitializer处理期间出错
javax.servlet.ServletException:javax.websocket.DeploymentException:在类[java.lang.reflect.method]的方法[onOpen]上找到了类型为[interface javax.websocket.Session]的参数,该方法没有@PathParam注释
在org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:146)上
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5444)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:744)
原因:javax.websocket.DeploymentException:在类[java.lang.reflect.method]的方法[onOpen]上发现了类型为[interface javax.websocket.Session]的参数,该方法没有@PathParam注释
位于org.apache.tomcat.websocket.pojo.PojoMethodMapping.getPathParams(PojoMethodMapping.java:233)
位于org.apache.tomcat.websocket.pojo.PojoMethodMapping.(PojoMethodMapping.java:122)
位于org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:239)
在org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:143)上
... 8个以上
1) 我应该如何在Tomcat7上将服务器端点配置为带注释的类。 2) 是否有任何特定于tomcat的方法来编写带注释的服务器端点? 3) 如果tomcat实现了JSR356,为什么它不支持上述配置


我努力想找到一个合适的例子,但没有找到。我还尝试放置@pathparam注释,但它只接收字符串并抛出classcastexception。

我使用的是1.b09 api。将其更改为1.0。
经验教训:始终选择稳定版本,而不是beta版本

也可能您使用了错误的@PathParam,请确保使用:

import javax.websocket.server.PathParam;
而不是:

import javax.ws.rs.PathParam;