Jersey dropwizard中的单元测试视图(续)

Jersey dropwizard中的单元测试视图(续),jersey,dropwizard,illegalargumentexception,nosuchmethoderror,hk2,Jersey,Dropwizard,Illegalargumentexception,Nosuchmethoderror,Hk2,正如在一篇文章中提到的,我正在尝试在Dropwizard中测试我的资源。这些资源可以返回json数据和视图。后者可用于freemarker模板。对于返回视图的测试路径,我扩展了的代码,还添加了一个提供程序: @ClassRule 公共静态最终ResourceTestRule resources=ResourceTestRule.builder() .addResource(新的MyResource(myDAO)).addProvider(ViewMessageBodyWriter.class).

正如在一篇文章中提到的,我正在尝试在Dropwizard中测试我的资源。这些资源可以返回json数据和视图。后者可用于freemarker模板。对于返回视图的测试路径,我扩展了的代码,还添加了一个提供程序:

@ClassRule
公共静态最终ResourceTestRule resources=ResourceTestRule.builder()
.addResource(新的MyResource(myDAO)).addProvider(ViewMessageBodyWriter.class).build();
但是,结果是出现以下冗长的错误消息:

WARN  [2015-04-14 12:00:33,471] org.glassfish.jersey.internal.Errors: The following warnings have been detected: WARNING: HK2 service reification failed for [io.dropwizard.views.ViewMessageBodyWriter] with an exception:
MultiException stack 1 of 2
java.lang.NoSuchMethodException: Could not find a suitable constructor in io.dropwizard.views.ViewMessageBodyWriter class.
    at org.glassfish.jersey.internal.inject.JerseyClassAnalyzer.getConstructor(JerseyClassAnalyzer.java:189)
    at org.jvnet.hk2.internal.Utilities.getConstructor(Utilities.java:180)
    at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:129)
    at org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:182)
    at org.jvnet.hk2.internal.SystemDescriptor.internalReify(SystemDescriptor.java:723)
    at org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:678)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:416)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2146)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.access$1000(ServiceLocatorImpl.java:120)
    at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1281)
    at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1276)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture$1.call(LRUHybridCache.java:115)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture$1.call(LRUHybridCache.java:111)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture.run(LRUHybridCache.java:173)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache.compute(LRUHybridCache.java:292)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1354)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1263)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1252)
    at org.glassfish.jersey.internal.inject.Providers.getServiceHandles(Providers.java:352)
    at org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:200)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.<init>(MessageBodyFactory.java:247)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1129)
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:274)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:368)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:82)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:70)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154)
    at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:121)
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2064)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:711)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:653)
    at org.glassfish.jersey.server.model.ComponentModelValidator.<init>(ComponentModelValidator.java:97)
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:496)
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:166)
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:327)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:324)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:277)
    at org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory$InMemoryTestContainer.<init>(InMemoryTestContainerFactory.java:77)
    at org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory$InMemoryTestContainer.<init>(InMemoryTestContainerFactory.java:63)
    at org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory.create(InMemoryTestContainerFactory.java:111)
    at org.glassfish.jersey.test.JerseyTest.createTestContainer(JerseyTest.java:277)
    at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:609)
    at io.dropwizard.testing.junit.ResourceTestRule$1.evaluate(ResourceTestRule.java:157)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
MultiException stack 2 of 2
java.lang.IllegalArgumentException: Errors were discovered while reifying SystemDescriptor(
    implementation=io.dropwizard.views.ViewMessageBodyWriter
    contracts={javax.ws.rs.ext.MessageBodyWriter}
    scope=javax.inject.Singleton
    qualifiers={org.glassfish.jersey.internal.inject.Custom}
    descriptorType=CLASS
    descriptorVisibility=NORMAL
    metadata=
    rank=0
    loader=null
    proxiable=null
    proxyForSameScope=null
    analysisName=null
    id=118
    locatorId=1
    identityHashCode=389247924
    reified=false)
    at org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:689)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:416)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.narrow(ServiceLocatorImpl.java:2146)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.access$1000(ServiceLocatorImpl.java:120)
    at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1281)
    at org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1276)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture$1.call(LRUHybridCache.java:115)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture$1.call(LRUHybridCache.java:111)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture.run(LRUHybridCache.java:173)
    at org.glassfish.hk2.utilities.cache.LRUHybridCache.compute(LRUHybridCache.java:292)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1354)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1263)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1252)
    at org.glassfish.jersey.internal.inject.Providers.getServiceHandles(Providers.java:352)
    at org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:200)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.<init>(MessageBodyFactory.java:247)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1129)
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:274)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:368)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:82)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:70)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154)
    at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:121)
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2064)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:711)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:653)
    at org.glassfish.jersey.server.model.ComponentModelValidator.<init>(ComponentModelValidator.java:97)
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:496)
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:166)
    at org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:327)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
    at org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:324)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:277)
    at org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory$InMemoryTestContainer.<init>(InMemoryTestContainerFactory.java:77)
    at org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory$InMemoryTestContainer.<init>(InMemoryTestContainerFactory.java:63)
    at org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory.create(InMemoryTestContainerFactory.java:111)
    at org.glassfish.jersey.test.JerseyTest.createTestContainer(JerseyTest.java:277)
    at org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:609)
    at io.dropwizard.testing.junit.ResourceTestRule$1.evaluate(ResourceTestRule.java:157)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
WARN[2015-04-14 12:00:33471]org.glassfish.jersey.internal.Errors:检测到以下警告:警告:针对[io.dropwizard.views.ViewMessageBodyWriter]的HK2服务具体化失败,但出现异常:
多异常堆栈1/2
java.lang.NoSuchMethodException:在io.dropwizard.views.ViewMessageBodyWriter类中找不到合适的构造函数。
位于org.glassfish.jersey.internal.inject.JerseyClassAnalyzer.getConstructor(JerseyClassAnalyzer.java:189)
位于org.jvnet.hk2.internal.Utilities.getConstructor(Utilities.java:180)
位于org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:129)
位于org.jvnet.hk2.internal.ClazzCreator.initialize(ClazzCreator.java:182)
位于org.jvnet.hk2.internal.SystemDescriptor.internalReify(SystemDescriptor.java:723)
位于org.jvnet.hk2.internal.SystemDescriptor.reify(SystemDescriptor.java:678)
位于org.jvnet.hk2.internal.ServiceLocatorImpl.reifyDescriptor(ServiceLocatorImpl.java:416)
位于org.jvnet.hk2.internal.ServiceLocatorImpl.窄带(ServiceLocatorImpl.java:2146)
org.jvnet.hk2.internal.ServiceLocatorImpl.access$1000(ServiceLocatorImpl.java:120)
位于org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1281)
位于org.jvnet.hk2.internal.ServiceLocatorImpl$9.compute(ServiceLocatorImpl.java:1276)
在org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture$1.call(LRUHybridCache.java:115)
位于org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture$1.call(LRUHybridCache.java:111)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
在org.glassfish.hk2.utilities.cache.LRUHybridCache$OriginThreadAwareFuture.run(LRUHybridCache.java:173)
位于org.glassfish.hk2.utilities.cache.LRUHybridCache.compute(LRUHybridCache.java:292)
位于org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetAllServiceHandles(ServiceLocatorImpl.java:1354)
位于org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1263)
位于org.jvnet.hk2.internal.ServiceLocatorImpl.getAllServiceHandles(ServiceLocatorImpl.java:1252)
位于org.glassfish.jersey.internal.inject.Providers.getServiceHandles(Providers.java:352)
位于org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:200)
位于org.glassfish.jersey.message.internal.MessageBodyFactory(MessageBodyFactory.java:247)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:408)
位于org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1129)
位于org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:274)
位于org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:368)
位于org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
位于org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:82)
位于org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:70)
位于org.glassfish.hk2.utilities.cache.cache$OriginThreadAwareFuture$1.call(cache.java:97)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于org.glassfish.hk2.utilities.cache.cache$OriginThreadAwareFuture.run(cache.java:154)
位于org.glassfish.hk2.utilities.cache.cache.compute(cache.java:199)
位于org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:121)
位于org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2064)
位于org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:711)
位于org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:653)
位于org.glassfish.jersey.server.model.ComponentModelValidator。(ComponentModelValidator.java:97)
位于org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:496)
位于org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:166)
位于org.glassfish.jersey.server.ApplicationHandler$3.run(ApplicationHandler.java:327)
位于org.glassfish.jersey.internal.Errors$2.call(Errors.java:289)
位于org.glassfish.jersey.internal.Errors$2.call(Errors.java:286)
位于org.glassfish.jersey.internal.Errors.process(Errors.java:315)
位于org.glassfish.jersey.internal.Errors.process(Errors.java:297)
位于org.glassfish.jersey.internal.Errors.processWithException(Errors.java:286)
位于org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:324)
位于org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:277)
位于org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory$InMemoryTestContainerFactory。(InMemoryTestContainerFactory.java:77)
位于org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory$InMemoryTestContainerFactory。(InMemoryTestContainerFactory.java:63)
在org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory.create(InMemoryTestContainerFactory.java:111)上
位于org.glassfish.jersey.test.JerseyTest.createTestContainer(JerseyTest.java:277)
位于org.glassfish.jersey.test.JerseyTest.setUp(JerseyTest.java:609)
在io.dropwizard.testing.junit.ResourceTestRule$1.evaluate(ResourceTestRule.jav
@ClassRule
public static final ResourceTestRule resources = ResourceTestRule.builder()
        .addResource(new MyResource(myDAO)).addProvider(new ViewMessageBodyWriter(new MetricRegistry(), ImmutableList.of(new FreemarkerViewRenderer()))).build();