Attempting to use a Spring configured HTTPConduit causing compatability
problems with Spring 2.5.4 testing framework
--------------------------------------------------------------------------------------------------------------------
Key: CXF-1663
URL: https://issues.apache.org/jira/browse/CXF-1663
Project: CXF
Issue Type: Bug
Components: Transports
Affects Versions: 2.0.5
Reporter: James Kavanagh
Priority: Minor
Hi there,
I'm attempting to run some integration tests with a spring configured HTTP
conduit:
<http:conduit name="*.http-conduit">
<http:tlsClientParameters secureSocketProtocol="SSL">
<sec:keyManagers keyPassword="0123456789">
<sec:keyStore type="PKCS12" password="0123456789"
file="src/test/resources/keystores/client.p12"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="0123456789"
file="src/test/resources/keystores/truststore.jks" />
</sec:trustManagers>
<sec:cipherSuitesFilter>
<!-- these filters ensure that a ciphersuite with
export-suitable or null encryption is used,
but exclude anonymous Diffie-Hellman key change as
this is vulnerable to man-in-the-middle attacks -->
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
</http:conduit>
My test class is using JUnit 4 annotations and I'm also extending from
AbstractJUnit4SpringContextTests which as you may know automatically loads the
spring context for you with autowiring turned on. The problem I'm having is
that HTTPConduit declares some of its methods with the @Resource annotation
which Spring then attempts to resolved dependencies for and fails. The issue is
that the HTTPConduit class does not need these dependencies injected in order
to function correctly so I guess I'm wondering why they are annotated as such.
Is this necessary?
If so is there anything I can do to work around this problem?
Here's a sample stack trace to illustrated the problem that occurs:
javax.xml.ws.soap.SOAPFaultException: Error creating bean with name
'*.http-conduit': Injection of resource methods failed; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean
of type [org.apache.cxf.configuration.security.AuthorizationPolicy] is defined:
Unsatisfied dependency of type [class
org.apache.cxf.configuration.security.AuthorizationPolicy]: expected at least 1
matching bean
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:211)
at $Proxy54.getAccountDetails(Unknown Source)
at
com.sportex.regpay.payment.mtapi.transfers.TransferFundsIntegrationTest.performTransferCreditSuccessfulWithGBP(TransferFundsIntegrationTest.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.springframework.test.context.junit4.SpringTestMethod.invoke(SpringTestMethod.java:163)
at
org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:233)
at
org.springframework.test.context.junit4.SpringMethodRoadie$RunBeforesThenTestThenAfters.run(SpringMethodRoadie.java:333)
at
org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:217)
at
org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:197)
at
org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:143)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:142)
at
org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
at
org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
at
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
at
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
at
org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.springframework.beans.factory.BeanCreationException: Error
creating bean with name '*.http-conduit': Injection of resource methods failed;
nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean
of type [org.apache.cxf.configuration.security.AuthorizationPolicy] is defined:
Unsatisfied dependency of type [class
org.apache.cxf.configuration.security.AuthorizationPolicy]: expected at least 1
matching bean
at
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:306)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:996)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.configureBean(AbstractAutowireCapableBeanFactory.java:283)
at
org.springframework.beans.factory.wiring.BeanConfigurerSupport.configureBean(BeanConfigurerSupport.java:155)
at
org.apache.cxf.configuration.spring.ConfigurerImpl.configureBean(ConfigurerImpl.java:114)
at
org.apache.cxf.configuration.spring.ConfigurerImpl.configureWithWildCard(ConfigurerImpl.java:134)
at
org.apache.cxf.configuration.spring.ConfigurerImpl.configureBean(ConfigurerImpl.java:101)
at
org.apache.cxf.configuration.spring.ConfigurerImpl.configureBean(ConfigurerImpl.java:84)
at
org.apache.cxf.transport.http.AbstractHTTPTransportFactory.configure(AbstractHTTPTransportFactory.java:223)
at
org.apache.cxf.transport.http.AbstractHTTPTransportFactory.getConduit(AbstractHTTPTransportFactory.java:163)
at
org.apache.cxf.transport.http.AbstractHTTPTransportFactory.getConduit(AbstractHTTPTransportFactory.java:145)
at
org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.java:73)
at
org.apache.cxf.endpoint.UpfrontConduitSelector.prepare(UpfrontConduitSelector.java:61)
at
org.apache.cxf.endpoint.ClientImpl.prepareConduitSelector(ClientImpl.java:452)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:273)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:170)
... 24 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No
unique bean of type [org.apache.cxf.configuration.security.AuthorizationPolicy]
is defined: Unsatisfied dependency of type [class
org.apache.cxf.configuration.security.AuthorizationPolicy]: expected at least 1
matching bean
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:613)
at
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:423)
at
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:502)
at
org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:192)
at
org.springframework.beans.factory.annotation.InjectionMetadata.injectMethods(InjectionMetadata.java:117)
at
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:303)
... 41 more
Many thanks,
James K
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.