You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wss4j-dev@ws.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2010/05/06 18:41:00 UTC

[jira] Commented: (WSS-230) WSS4JInInterceptor.getAction throws "No security action was defined" when using Spring default-autowire="byType"

    [ https://issues.apache.org/jira/browse/WSS-230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12864825#action_12864825 ] 

Daniel Kulp commented on WSS-230:
---------------------------------



This is really just the way spring works and not much WE can do about it.   However, you can make it work correctly for your case by using the property directly and not use the constrctor arg:

  <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">
        <property name="properties">
          <map>
            <entry key="action" value="UsernameToken" />
            <entry key="passwordType" value="PasswordText" />
            <entry key="passwordCallbackRef">
              <ref bean="serverPasswordCallback" />
            </entry>
          </map>
        </property>
      </bean>
    </jaxws:inInterceptors>
  </jaxws:endpoint>


Since there will be a definition for the properties property, it will use it.


> 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
>         Attachments: webservice_sample_apache_cxf.tar.gz
>
>
> 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: wss4j-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: wss4j-dev-help@ws.apache.org