当前位置: 移动技术网 > IT编程>开发语言>Java > springboot整合websocket后运行测试类报错:javax.websocket.server.ServerContainer not available

springboot整合websocket后运行测试类报错:javax.websocket.server.ServerContainer not available

2019年02月14日  | 移动技术网IT编程  | 我要评论

传世最新私服,我的家乡手抄报,造梦西游龙王怎么打

springboot项目添加websocket依赖后运行测试类报如下错误:

  1 org.springframework.beans.factory.beancreationexception: error creating bean with name 'serverendpointexporter' defined in org.lwt.websocketservertestapplication: invocation of init method failed; nested exception is java.lang.illegalstateexception: javax.websocket.server.servercontainer not available
  2     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1745) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
  3     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:576) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
  4     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:498) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
  5     at org.springframework.beans.factory.support.abstractbeanfactory.lambda$dogetbean$0(abstractbeanfactory.java:320) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
  6     at org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
  7     at org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:318) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
  8     at org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:199) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
  9     at org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:846) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 10     at org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:863) ~[spring-context-5.1.4.release.jar:5.1.4.release]
 11     at org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:546) ~[spring-context-5.1.4.release.jar:5.1.4.release]
 12     at org.springframework.boot.springapplication.refresh(springapplication.java:775) ~[spring-boot-2.1.2.release.jar:2.1.2.release]
 13     at org.springframework.boot.springapplication.refreshcontext(springapplication.java:397) ~[spring-boot-2.1.2.release.jar:2.1.2.release]
 14     at org.springframework.boot.springapplication.run(springapplication.java:316) ~[spring-boot-2.1.2.release.jar:2.1.2.release]
 15     at org.springframework.boot.test.context.springbootcontextloader.loadcontext(springbootcontextloader.java:127) [spring-boot-test-2.1.2.release.jar:2.1.2.release]
 16     at org.springframework.test.context.cache.defaultcacheawarecontextloaderdelegate.loadcontextinternal(defaultcacheawarecontextloaderdelegate.java:99) [spring-test-5.1.4.release.jar:5.1.4.release]
 17     at org.springframework.test.context.cache.defaultcacheawarecontextloaderdelegate.loadcontext(defaultcacheawarecontextloaderdelegate.java:117) [spring-test-5.1.4.release.jar:5.1.4.release]
 18     at org.springframework.test.context.support.defaulttestcontext.getapplicationcontext(defaulttestcontext.java:108) [spring-test-5.1.4.release.jar:5.1.4.release]
 19     at org.springframework.test.context.web.servlettestexecutionlistener.setuprequestcontextifnecessary(servlettestexecutionlistener.java:190) [spring-test-5.1.4.release.jar:5.1.4.release]
 20     at org.springframework.test.context.web.servlettestexecutionlistener.preparetestinstance(servlettestexecutionlistener.java:132) [spring-test-5.1.4.release.jar:5.1.4.release]
 21     at org.springframework.test.context.testcontextmanager.preparetestinstance(testcontextmanager.java:246) [spring-test-5.1.4.release.jar:5.1.4.release]
 22     at org.springframework.test.context.junit4.springjunit4classrunner.createtest(springjunit4classrunner.java:227) [spring-test-5.1.4.release.jar:5.1.4.release]
 23     at org.springframework.test.context.junit4.springjunit4classrunner$1.runreflectivecall(springjunit4classrunner.java:289) [spring-test-5.1.4.release.jar:5.1.4.release]
 24     at org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:12) [junit-4.12.jar:4.12]
 25     at org.springframework.test.context.junit4.springjunit4classrunner.methodblock(springjunit4classrunner.java:291) [spring-test-5.1.4.release.jar:5.1.4.release]
 26     at org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:246) [spring-test-5.1.4.release.jar:5.1.4.release]
 27     at org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:97) [spring-test-5.1.4.release.jar:5.1.4.release]
 28     at org.junit.runners.parentrunner$3.run(parentrunner.java:290) [junit-4.12.jar:4.12]
 29     at org.junit.runners.parentrunner$1.schedule(parentrunner.java:71) [junit-4.12.jar:4.12]
 30     at org.junit.runners.parentrunner.runchildren(parentrunner.java:288) [junit-4.12.jar:4.12]
 31     at org.junit.runners.parentrunner.access$000(parentrunner.java:58) [junit-4.12.jar:4.12]
 32     at org.junit.runners.parentrunner$2.evaluate(parentrunner.java:268) [junit-4.12.jar:4.12]
 33     at org.springframework.test.context.junit4.statements.runbeforetestclasscallbacks.evaluate(runbeforetestclasscallbacks.java:61) [spring-test-5.1.4.release.jar:5.1.4.release]
 34     at org.springframework.test.context.junit4.statements.runaftertestclasscallbacks.evaluate(runaftertestclasscallbacks.java:70) [spring-test-5.1.4.release.jar:5.1.4.release]
 35     at org.junit.runners.parentrunner.run(parentrunner.java:363) [junit-4.12.jar:4.12]
 36     at org.springframework.test.context.junit4.springjunit4classrunner.run(springjunit4classrunner.java:190) [spring-test-5.1.4.release.jar:5.1.4.release]
 37     at org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:86) [.cp/:na]
 38     at org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38) [.cp/:na]
 39     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:538) [.cp/:na]
 40     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:760) [.cp/:na]
 41     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:460) [.cp/:na]
 42     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:206) [.cp/:na]
 43 caused by: java.lang.illegalstateexception: javax.websocket.server.servercontainer not available
 44     at org.springframework.util.assert.state(assert.java:73) ~[spring-core-5.1.4.release.jar:5.1.4.release]
 45     at org.springframework.web.socket.server.standard.serverendpointexporter.afterpropertiesset(serverendpointexporter.java:106) ~[spring-websocket-5.1.4.release.jar:5.1.4.release]
 46     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1804) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 47     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1741) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 48     ... 40 common frames omitted
 49 
 50 2019-02-13 14:13:38.640 error 14060 --- [           main] o.s.test.context.testcontextmanager      : caught exception while allowing testexecutionlistener [org.springframework.test.context.web.servlettestexecutionlistener@1c93084c] to prepare test instance [org.lwt.websocketservertestapplicationtests@403132fc]
 51 
 52 java.lang.illegalstateexception: failed to load applicationcontext
 53     at org.springframework.test.context.cache.defaultcacheawarecontextloaderdelegate.loadcontext(defaultcacheawarecontextloaderdelegate.java:125) ~[spring-test-5.1.4.release.jar:5.1.4.release]
 54     at org.springframework.test.context.support.defaulttestcontext.getapplicationcontext(defaulttestcontext.java:108) ~[spring-test-5.1.4.release.jar:5.1.4.release]
 55     at org.springframework.test.context.web.servlettestexecutionlistener.setuprequestcontextifnecessary(servlettestexecutionlistener.java:190) ~[spring-test-5.1.4.release.jar:5.1.4.release]
 56     at org.springframework.test.context.web.servlettestexecutionlistener.preparetestinstance(servlettestexecutionlistener.java:132) ~[spring-test-5.1.4.release.jar:5.1.4.release]
 57     at org.springframework.test.context.testcontextmanager.preparetestinstance(testcontextmanager.java:246) ~[spring-test-5.1.4.release.jar:5.1.4.release]
 58     at org.springframework.test.context.junit4.springjunit4classrunner.createtest(springjunit4classrunner.java:227) [spring-test-5.1.4.release.jar:5.1.4.release]
 59     at org.springframework.test.context.junit4.springjunit4classrunner$1.runreflectivecall(springjunit4classrunner.java:289) [spring-test-5.1.4.release.jar:5.1.4.release]
 60     at org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:12) [junit-4.12.jar:4.12]
 61     at org.springframework.test.context.junit4.springjunit4classrunner.methodblock(springjunit4classrunner.java:291) [spring-test-5.1.4.release.jar:5.1.4.release]
 62     at org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:246) [spring-test-5.1.4.release.jar:5.1.4.release]
 63     at org.springframework.test.context.junit4.springjunit4classrunner.runchild(springjunit4classrunner.java:97) [spring-test-5.1.4.release.jar:5.1.4.release]
 64     at org.junit.runners.parentrunner$3.run(parentrunner.java:290) [junit-4.12.jar:4.12]
 65     at org.junit.runners.parentrunner$1.schedule(parentrunner.java:71) [junit-4.12.jar:4.12]
 66     at org.junit.runners.parentrunner.runchildren(parentrunner.java:288) [junit-4.12.jar:4.12]
 67     at org.junit.runners.parentrunner.access$000(parentrunner.java:58) [junit-4.12.jar:4.12]
 68     at org.junit.runners.parentrunner$2.evaluate(parentrunner.java:268) [junit-4.12.jar:4.12]
 69     at org.springframework.test.context.junit4.statements.runbeforetestclasscallbacks.evaluate(runbeforetestclasscallbacks.java:61) [spring-test-5.1.4.release.jar:5.1.4.release]
 70     at org.springframework.test.context.junit4.statements.runaftertestclasscallbacks.evaluate(runaftertestclasscallbacks.java:70) [spring-test-5.1.4.release.jar:5.1.4.release]
 71     at org.junit.runners.parentrunner.run(parentrunner.java:363) [junit-4.12.jar:4.12]
 72     at org.springframework.test.context.junit4.springjunit4classrunner.run(springjunit4classrunner.java:190) [spring-test-5.1.4.release.jar:5.1.4.release]
 73     at org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:86) [.cp/:na]
 74     at org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38) [.cp/:na]
 75     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:538) [.cp/:na]
 76     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:760) [.cp/:na]
 77     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:460) [.cp/:na]
 78     at org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:206) [.cp/:na]
 79 caused by: org.springframework.beans.factory.beancreationexception: error creating bean with name 'serverendpointexporter' defined in org.lwt.websocketservertestapplication: invocation of init method failed; nested exception is java.lang.illegalstateexception: javax.websocket.server.servercontainer not available
 80     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1745) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 81     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:576) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 82     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:498) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 83     at org.springframework.beans.factory.support.abstractbeanfactory.lambda$dogetbean$0(abstractbeanfactory.java:320) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 84     at org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 85     at org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:318) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 86     at org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:199) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 87     at org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:846) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
 88     at org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:863) ~[spring-context-5.1.4.release.jar:5.1.4.release]
 89     at org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:546) ~[spring-context-5.1.4.release.jar:5.1.4.release]
 90     at org.springframework.boot.springapplication.refresh(springapplication.java:775) ~[spring-boot-2.1.2.release.jar:2.1.2.release]
 91     at org.springframework.boot.springapplication.refreshcontext(springapplication.java:397) ~[spring-boot-2.1.2.release.jar:2.1.2.release]
 92     at org.springframework.boot.springapplication.run(springapplication.java:316) ~[spring-boot-2.1.2.release.jar:2.1.2.release]
 93     at org.springframework.boot.test.context.springbootcontextloader.loadcontext(springbootcontextloader.java:127) ~[spring-boot-test-2.1.2.release.jar:2.1.2.release]
 94     at org.springframework.test.context.cache.defaultcacheawarecontextloaderdelegate.loadcontextinternal(defaultcacheawarecontextloaderdelegate.java:99) ~[spring-test-5.1.4.release.jar:5.1.4.release]
 95     at org.springframework.test.context.cache.defaultcacheawarecontextloaderdelegate.loadcontext(defaultcacheawarecontextloaderdelegate.java:117) ~[spring-test-5.1.4.release.jar:5.1.4.release]
 96     ... 25 common frames omitted
 97 caused by: java.lang.illegalstateexception: javax.websocket.server.servercontainer not available
 98     at org.springframework.util.assert.state(assert.java:73) ~[spring-core-5.1.4.release.jar:5.1.4.release]
 99     at org.springframework.web.socket.server.standard.serverendpointexporter.afterpropertiesset(serverendpointexporter.java:106) ~[spring-websocket-5.1.4.release.jar:5.1.4.release]
100     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1804) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
101     at org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1741) ~[spring-beans-5.1.4.release.jar:5.1.4.release]
102     ... 40 common frames omitted

解决办法:为springboottest注解指定参数classes和webenvironment

@springboottest(webenvironment = springboottest.webenvironment.defined_port)
因为websocket是servlet容器所支持的,所以需要加载servlet容器:
webenvironment参数为springboot指定applicationcontext类型。
webenvironment = springboottest.webenvironment.defined_port表示内嵌的服务器将会在一个随机的端口启动。
webenvironment主要有一下类型:
 1 enum webenvironment {
 2 
 3         /**
 4          * creates a {@link webapplicationcontext} with a mock servlet environment if
 5          * servlet apis are on the classpath, a {@link reactivewebapplicationcontext} if
 6          * spring webflux is on the classpath or a regular {@link applicationcontext}
 7          * otherwise.
 8          */
 9         mock(false),
10 
11         /**
12          * creates a web application context (reactive or servlet based) and sets a
13          * {@code server.port=0} {@link environment} property (which usually triggers
14          * listening on a random port). often used in conjunction with a
15          * {@link localserverport} injected field on the test.
16          */
17         random_port(true),
18 
19         /**
20          * creates a (reactive) web application context without defining any
21          * {@code server.port=0} {@link environment} property.
22          */
23         defined_port(true),
24 
25         /**
26          * creates an {@link applicationcontext} and sets
27          * {@link springapplication#setwebapplicationtype(webapplicationtype)} to
28          * {@link webapplicationtype#none}.
29          */
30         none(false);
31 
32         private final boolean embedded;
33 
34         webenvironment(boolean embedded) {
35             this.embedded = embedded;
36         }
37 
38         /**
39          * return if the environment uses an {@link servletwebserverapplicationcontext}.
40          * @return if an {@link servletwebserverapplicationcontext} is used.
41          */
42         public boolean isembedded() {
43             return this.embedded;
44         }
45 
46     }

对于springboot如何创建applicationcontext,可以参考博客:https://blog.csdn.net/lilongjiu/article/details/78045062。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网