ここにあるJerseyチュートリアルの例を試して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.invoke0(Native Method) で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で java.lang. Reflect.Method.invoke(Method.java:597) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) org.testng.internal.Invoker.invokeMethod(Invoker.java:714) で org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) で org.testng.internal.Invoker.invokeTestMethods(Invoker.java) :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.run(TestRunner.java:617) で org.testng.SuiteRunner.runTest(SuiteRunner.java:334) で org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) で org. testng.SuiteRunner.privateRun(SuiteRunner.java:291) で org.testng.SuiteRunner.run(SuiteRunner.java:240) で org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) で org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) at org.testng.TestNG.run(TestNG.java) :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) 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.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 .glassfish.jersey.client.ClientRuntime$1.run(ClientRuntime.java:156) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1. call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish 。ジャージー。internal.Errors.process(Errors.java:267) で org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:322) で org.glassfish.jersey.client.ClientRuntime$2.run(ClientRuntime.java) :170) java.util.concurrent.FutureTask. run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang .Thread.run(Thread.java:662) 原因: java.lang.NullPointerException at org.glassfish.jersey.internal.util.KeyComparatorHashMap.putAll(KeyComparatorHashMap.java:509) at javax.ws.rs.core.AbstractMultivaluedMap .org.glassfish.jersey.test.inmemory.internal.InMemoryConnector.createClientResponse(InMemoryConnector.java:286) の putAll(AbstractMultivaluedMap.java:332) org.glassfish.jersey.test.inmemory.internal.InMemoryConnector.apply(InMemoryConnector. java:247) at org.glassfish.jersey.test.inmemory.internal.InMemoryConnector$3.run(InMemoryConnector.java:261) ... 20 詳細