spring - Programmatically register'ing WebMvcConfigurationSupport instead of @Configuration -
[this question similar "preventing @enablewebmvc-annotated class being picked @componentscan", different attack vector problem, got problem in spring 4]
since @componentscan finds @configuration instances, picks extension of webmvcconfigurationsupport want in servlet environment. in integration test mode, don't want that, since complains servletcontext not being present.
java.lang.illegalstateexception: failed load applicationcontext @ org.springframework.test.context.cacheawarecontextloaderdelegate.loadcontext(cacheawarecontextloaderdelegate.java:99) @ ... caused by: java.lang.illegalargumentexception: servletcontext required configure default servlet handling @ org.springframework.util.assert.notnull(assert.java:112) @ org.springframework.web.servlet.config.annotation.defaultservlethandlerconfigurer.(defaultservlethandlerconfigurer.java:54) @ org.springframework.web.servlet.config.annotation.webmvcconfigurationsupport.defaultservlethandlermapping(webmvcconfigurationsupport.java:329) @ ...
i used fix instead of letting found @componentscan having @configuration annotation, directly include using annotationconfigwebapplicationcontext.register(thatclass), code not run during integration test setup.
this worked fine until upgraded spring 4.0.2, new exception 4.0 class compositeuricomponentscontributor:
caused by: java.lang.illegalargumentexception: 'uricomponentscontributors' must not null @ org.springframework.util.assert.notnull(assert.java:112) ~[spring-core-4.0.2.release.jar:4.0.2.release] @ org.springframework.web.method.support.compositeuricomponentscontributor.(compositeuricomponentscontributor.java:88) ~[spring-web-4.0.2.release.jar:4.0.2.release] @ org.springframework.web.servlet.config.annotation.webmvcconfigurationsupport.mvcuricomponentscontributor(webmvcconfigurationsupport.java:573) ~[spring-webmvc-4.0.2.release.jar:4.0.2.release] @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[na:1.7.0_51] @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) ~[na:1.7.0_51] @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.7.0_51] @ java.lang.reflect.method.invoke(method.java:606) ~[na:1.7.0_51] @ org.springframework.beans.factory.support.simpleinstantiationstrategy.instantiate(simpleinstantiationstrategy.java:166) ~[spring-beans-4.0.2.release.jar:4.0.2.release] ... 34 common frames omitted
so apparently reason needs "@configuration-found", instead of being included register call.
why that? how can fixed? understand can move out of @componentscan "path", want know happens.
try this: annotate integration test classes @webappconfiguration
. create mock servletcontext
spring mvc setup.
Comments
Post a Comment