我刚刚尝试了泽西教程的示例,该示例涉及AsyncResponse
并可以在此处找到:http: //jersey.java.net/apidocs/snapshot/jersey/javax/ws/rs/container/AsyncResponse.html
它似乎不起作用。即使是在简单的单元测试中执行的示例也会引发异常:
public class AsyncTest extends JerseyTest {
@Override
protected Application configure() {
return new ResourceConfig(MyAsync.class)
}
@Path("/async")
public static class MyAsync {
@GET
public void asyncGet(@Suspended final AsyncResponse asyncResponse) {
new Thread(new Runnable() {
@Override
public void run() {
String result = veryExpensiveOperation();
asyncResponse.resume(result);
}
private String veryExpensiveOperation() {
return "bla";
}
}).start();
}
}
@Test
public void testConvertWordToPdf() throws Exception {
String result = target().path("async").request().async().get().get(String.class);
}
}
有人可以告诉我我做错了什么吗?感谢您的任何回答!
更新:我什至尝试了可以在http://search.maven.org/#artifactdetails|org.glassfish.jersey.examples|server-async-standalone-webapp|2.1|war找到的官方示例,我得到了同样的结果例外。如果我确保AsyncResponse
在方法返回之前响应,则该示例有效。我得到的堆栈跟踪:
java.util.concurrent.ExecutionException: javax.ws.rs.ProcessingException: java.lang.NullPointerException at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:306) at com.google.common .util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:293) 在 com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) 在 MyCompany.jersey.ConverterResourceTest.testTest(MyClass.java :20) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang。 reflect.Method.invoke(Method.java:597) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 在 org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 在 org.testng.internal.Invoker.invokeTestMethods(Invoker.java) 的 org.testng.internal.Invoker.invokeMethod(Invoker.java:714) :1231) 在 org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 在 org.testng.TestRunner.privateRun(TestRunner.java: 767) 在 org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 在 org.testng.TestRunner.run(TestRunner.java:617) 在 org. testng.SuiteRunner.privateRun(SuiteRunner.java:291) at org.testng.SuiteRunner.run(SuiteRunner.java:240) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker。在 org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 在 org.testng.TestNG.run(TestNG.java) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 运行(SuiteRunnerWorker.java:86) :1057) 在 org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 在 org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 在 org.testng.remote.RemoteTestNG.main(RemoteTestNG. java:175) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:111) 引起:javax.ws.rs.ProcessingException: java.lang.NullPointerException at org.glassfish.jersey.client.ClientRuntime$1$1.failure( ClientRuntime.java:148) 在 org.glassfish.jersey.test.inmemory.internal.InMemoryConnector$3.run(InMemoryConnector.java:265) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 在java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors. java:293) 在 com.google.common.util.concurrent.AbstractListeningExecutorService.submit(AbstractListeningExecutorService.java:49) 在 org.glassfish.jersey.test.inmemory.internal.InMemoryConnector.apply(InMemoryConnector.java:257) 在 org org.glassfish.jersey.client.ClientRuntime$1.run(ClientRuntime.java:156) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 在 org.glassfish.jersey.internal.Errors$1。在 org.glassfish.jersey.internal.Errors.process(Errors.java:297) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:315) 在 org.glassfish 调用(Errors.java:267) 。球衣。internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:322) at org.glassfish.jersey.client.ClientRuntime$2.run(ClientRuntime.java :170) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask 的 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)。 run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang .Thread.run(Thread.java:662) 引起:javax.ws.rs.core.AbstractMultivaluedMap 的 org.glassfish.jersey.internal.util.KeyComparatorHashMap.putAll(KeyComparatorHashMap.java:509) 的 java.lang.NullPointerException .putAll(AbstractMultivaluedMap.java:332) at org.glassfish.jersey.test.inmemory.internal.InMemoryConnector.createClientResponse(InMemoryConnector.java:286) at org.glassfish.jersey.test.inmemory.internal.InMemoryConnector.apply(InMemoryConnector. java:247) 在 org.glassfish.jersey.test.inmemory.internal.InMemoryConnector$3.run(InMemoryConnector.java:261) ... 20 更多