WSS4JInInterceptor.getAction throws "No security action was defined" when using
Spring default-autowire="byType"
----------------------------------------------------------------------------------------------------------------
Key: WSS-230
URL: https://issues.apache.org/jira/browse/WSS-230
Project: WSS4J
Issue Type: Bug
Affects Versions: 1.5.8
Environment: spring 2.5.6, wss4j 1.5.8
Reporter: Cheng Lee
Assignee: Ruchith Udayanga Fernando
I'm getting "No security action was defined!":
May 6, 2010 12:11:18 PM org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor
getAction
WARNING: No security action was defined!
May 6, 2010 12:11:18 PM org.apache.cxf.phase.PhaseInterceptorChain
doDefaultLoggingWARNING: Interceptor for
{http://service.auth.company.com/}corporateAuthService has thrown exception,
unwinding now
org.apache.cxf.binding.soap.SoapFault: No security action was defined!
at
org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.getAction(WSS4JInInterceptor.java:421)
at
org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:189)
at
org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:78)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:110)
at
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:98)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:423)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:178)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:142)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
When using Spring autowire by type, WSS4jInInterceptor.setProperties() is
called twice, thus overwriting my configuration below:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd"
default-autowire="byType">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="auth" implementor="#authServiceImpl"
address="/swAuth">
<jaxws:inInterceptors>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry key="action" value="UsernameToken" />
<entry key="passwordType" value="PasswordText" />
<entry key="passwordCallbackRef">
<ref bean="serverPasswordCallback" />
</entry>
</map>
</constructor-arg>
</bean>
</jaxws:inInterceptors>
</jaxws:endpoint>
<bean id="serverPasswordCallback"
class="com.company.auth.service.ServerPasswordCallback">
<property name="username">
<value>ws-client</value>
</property>
<property name="password">
<value>123</value>
</property>
</bean>
<bean id="authServiceImpl" class="com.company.auth.service.AuthServiceImpl">
<property name="employeeDao" ref="employeeDao" />
</bean>
</beans>
----------
This is evidenced while debugging:
First time at WSS4JInInterceptor instantiation it calls setProperties() with my
values:
Thread [main] (Suspended (breakpoint at line 112 in WSS4JInInterceptor))
WSS4JInInterceptor.<init>(Map<String,Object>) line: 112
NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line:
not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: 39
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27
Constructor<T>.newInstance(Object...) line: 513
BeanUtils.instantiateClass(Constructor, Object[]) line: 100
CglibSubclassingInstantiationStrategy(SimpleInstantiationStrategy).instantiate(RootBeanDefinition,
String, BeanFactory, Constructor, Object[]) line: 87
ConstructorResolver.autowireConstructor(String, RootBeanDefinition,
Constructor[], Object[]) line: 248
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).autowireConstructor(String,
RootBeanDefinition, Constructor[], Object[]) line: 925
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBeanInstance(String,
RootBeanDefinition, Object[]) line: 835
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,
RootBeanDefinition, Object[]) line: 440
AbstractAutowireCapableBeanFactory$1.run() line: 409
AccessController.doPrivileged(PrivilegedAction<T>,
AccessControlContext) line: not available [native method]
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,
RootBeanDefinition, Object[]) line: 380
BeanDefinitionValueResolver.resolveInnerBean(Object, String,
BeanDefinition) line: 219
BeanDefinitionValueResolver.resolveValueIfNecessary(Object, Object)
line: 117
BeanDefinitionValueResolver.resolveManagedList(Object, List) line: 287
BeanDefinitionValueResolver.resolveValueIfNecessary(Object, Object)
line: 126
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyPropertyValues(String,
BeanDefinition, BeanWrapper, PropertyValues) line: 1245
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String,
AbstractBeanDefinition, BeanWrapper) line: 1010
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,
RootBeanDefinition, Object[]) line: 472
AbstractAutowireCapableBeanFactory$1.run() line: 409
AccessController.doPrivileged(PrivilegedAction<T>,
AccessControlContext) line: not available [native method]
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,
RootBeanDefinition, Object[]) line: 380
AbstractBeanFactory$1.getObject() line: 264
DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,
ObjectFactory) line: 222
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
Class, Object[], boolean) line: 261
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
Object[]) line: 185
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line:
164
DefaultListableBeanFactory.preInstantiateSingletons() line: 429
XmlWebApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory)
line: 728
XmlWebApplicationContext(AbstractApplicationContext).refresh() line:
380
ContextLoader.createWebApplicationContext(ServletContext,
ApplicationContext) line: 255
ContextLoader.initWebApplicationContext(ServletContext) line: 199
ContextLoaderListener.contextInitialized(ServletContextEvent) line: 45
StandardContext.listenerStart() line: 3972
StandardContext.start() line: 4467
StandardHost(ContainerBase).start() line: 1045
StandardHost.start() line: 722
StandardEngine(ContainerBase).start() line: 1045
StandardEngine.start() line: 443
StandardService.start() line: 516
StandardServer.start() line: 710
Catalina.start() line: 593
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
Bootstrap.start() line: 289
Bootstrap.main(String[]) line: 414
And then another invokation to setProperties(Map):
Thread [main] (Suspended (breakpoint at line 130 in AbstractWSS4JInterceptor))
WSS4JInInterceptor(AbstractWSS4JInterceptor).setProperties(Map<String,Object>)
line: 130
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
BeanWrapperImpl.setPropertyValue(BeanWrapperImpl$PropertyTokenHolder,
PropertyValue) line: 840
BeanWrapperImpl.setPropertyValue(PropertyValue) line: 651
BeanWrapperImpl(AbstractPropertyAccessor).setPropertyValues(PropertyValues,
boolean, boolean) line: 78
BeanWrapperImpl(AbstractPropertyAccessor).setPropertyValues(PropertyValues)
line: 59
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyPropertyValues(String,
BeanDefinition, BeanWrapper, PropertyValues) line: 1276
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String,
AbstractBeanDefinition, BeanWrapper) line: 1010
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,
RootBeanDefinition, Object[]) line: 472
AbstractAutowireCapableBeanFactory$1.run() line: 409
AccessController.doPrivileged(PrivilegedAction<T>,
AccessControlContext) line: not available [native method]
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,
RootBeanDefinition, Object[]) line: 380
BeanDefinitionValueResolver.resolveInnerBean(Object, String,
BeanDefinition) line: 219
BeanDefinitionValueResolver.resolveValueIfNecessary(Object, Object)
line: 117
BeanDefinitionValueResolver.resolveManagedList(Object, List) line: 287
BeanDefinitionValueResolver.resolveValueIfNecessary(Object, Object)
line: 126
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyPropertyValues(String,
BeanDefinition, BeanWrapper, PropertyValues) line: 1245
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String,
AbstractBeanDefinition, BeanWrapper) line: 1010
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,
RootBeanDefinition, Object[]) line: 472
AbstractAutowireCapableBeanFactory$1.run() line: 409
AccessController.doPrivileged(PrivilegedAction<T>,
AccessControlContext) line: not available [native method]
DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,
RootBeanDefinition, Object[]) line: 380
AbstractBeanFactory$1.getObject() line: 264
DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,
ObjectFactory) line: 222
DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,
Class, Object[], boolean) line: 261
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String, Class,
Object[]) line: 185
DefaultListableBeanFactory(AbstractBeanFactory).getBean(String) line:
164
DefaultListableBeanFactory.preInstantiateSingletons() line: 429
XmlWebApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory)
line: 728
XmlWebApplicationContext(AbstractApplicationContext).refresh() line:
380
ContextLoader.createWebApplicationContext(ServletContext,
ApplicationContext) line: 255
ContextLoader.initWebApplicationContext(ServletContext) line: 199
ContextLoaderListener.contextInitialized(ServletContextEvent) line: 45
StandardContext.listenerStart() line: 3972
StandardContext.start() line: 4467
StandardHost(ContainerBase).start() line: 1045
StandardHost.start() line: 722
StandardEngine(ContainerBase).start() line: 1045
StandardEngine.start() line: 443
StandardService.start() line: 516
StandardServer.start() line: 710
Catalina.start() line: 593
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
Bootstrap.start() line: 289
Bootstrap.main(String[]) line: 414
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]