由于websocket部署异常,Tomcat 7.0.50无法初始化

时间:2014-02-15 20:15:15

标签: websocket tomcat7 endpoint

我正在尝试在tomcat 7.0.50上部署WebSockets。以下是我的代码

 @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());
    }
}

} 我从链接上的javaee的websocket示例的oracles笔记中选择了上面的代码:     http://docs.oracle.com/javaee/7/tutorial/doc/websocket004.htm 我的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

1)我应该如何在tomcat 7上将服务器端点配置为带注释的类。 2)是否有任何tomcat特定的方式来编写带注释的服务器端点? 3)如果tomcat实现JSR356,为什么它不支持上面的配置?

我努力找到一个合适的例子,但不能。我也试过把@pathparam注释,但它只是修改字符串并抛出classcastexception。

2 个答案:

答案 0 :(得分:1)

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

import javax.websocket.server.PathParam;

而不是:

import javax.ws.rs.PathParam;

答案 1 :(得分:0)

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