Websocket客户端无法部署到Glassfish

时间:2013-08-21 23:15:15

标签: java websocket glassfish-4 java-ee-7 tyrus

亲爱的Stack Overflow Geeks,

我正在尝试使用Java EE 7创建一个非常基本的Java客户端 - 服务器应用程序,目的是使用JSR 356实现通过websocket发送消息。

我已经在我发现的各种博客之后成功编程和部署了服务器,并且我能够与我的java服务器通信Javascript客户端。

现在我要做的是创建一个独立的Java应用程序,需要与服务器通信并检索相同的信息。我读到JSR 356实现可以在Java客户端中使用,这正是我所做的。我还使用Tyrus来创建客户端并使用闩锁机制等继续运行它等。美观。客户端最终被编程,服务器启动并运行但是当我尝试运行客户端时出现此错误:

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446)
at org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:166)
Caused by: java.lang.NoClassDefFoundError: javax/websocket/CloseReason$CloseCode
at Main.Main.main(Main.java:27)
... 6 more
Caused by: java.lang.ClassNotFoundException: javax.websocket.CloseReason$CloseCode
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at org.glassfish.appclient.client.acc.ACCClassLoader.findClass(ACCClassLoader.java:237)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 7 more
Java Result: 1

我在NetBeans 7.3中使用Java EE 7 API + Tyrus并在Glassfish 4中部署(从我读过的内容中支持JSR 356实现) 现在,为什么在地球上找不到CloseReason类! :( 它不应该编译,如果是这样的话,不是吗?

奇怪的是,不抱怨与websocket实现相关的其他类(JSR 356),另一方面,我部署了服务器(web-app),websocket机制正常工作。 (我想虽然我没有在那里实现CloseReason ..但为什么它只抱怨那个!:@)

我们非常感谢您提供的任何帮助!!

干杯,

另一个Stack Overflow Geek寻求帮助。 :)

1 个答案:

答案 0 :(得分:1)

我说完全不可能只分析堆栈跟踪并给你一个“答案”。至少你应该在项目中加入一些代码片段。

好的,我认为可能是这个问题:Tyrus库不随应用程序客户端容器一起分发。在本地,然后,类加载器想要加载的第一个类将失败。

因此,右键单击您的项目并选择属性。选择。确保您的库已放在运行标签下。如果没有,请点击此标签中的添加资料库... 按钮,然后按照以下步骤操作!

希望这对你有所帮助。如果没有,请查看this教程,了解如何打包JavaFX客户端并让他通过Java Web Start启动。本教程中的应用程序客户端也依赖于外部库,您可能会在那里找到有用的东西。