0

我刚刚尝试了泽西教程的示例,该示例涉及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 更多

4

1 回答 1

1

顺便说一句,我在 Grizzly 容器中测试了这个测试用例。InMemory 容器不支持它,因为容器没有在 ContainerResponseWriter 上实现挂起操作。InMemoryResponseWriter 应该抛出 UnsupportedOperationException 而不是返回 false。这听起来像泽西虫。

@Test
public void testConvertWordToPdf() throws Exception {
    String result = target().path("async").request().async().get().get().readEntity(String.class);
    assertEquals("bla", result);
}

这是我的 POM 依赖项:

    <dependency>
        <groupId>org.glassfish.jersey.test-framework.providers</groupId>
        <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
        <version>2.1</version>
        <scope>test</scope>
    </dependency>
于 2013-08-12T20:09:15.737 回答