You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by nicky123 <va...@gmail.com> on 2013/06/20 07:28:09 UTC

Annotation based WS-SecurityPolicy throwing exception

Hello,

I am working on annotation base ws-securityPolicy and have the following
annotation on the service bean.
Note: using cxf version of 2.7.5

@WebService(endpointInterface = "com.apachecxf.services.HelloWorldService")
@Policy(uri = "policies/TestImplPolicy.xml")
@EndpointProperty(key="ws-security.ut.validator",
value="com.apachecxf.services.CustomUserTokenValidator")
public class HelloWorldServiceBean implements HelloWorldService {

	public String sayHello() {
		System.out.println("Hello World!!!");
		return "Hello my service is working";
	}

}

The bean configuration file have just the bean definition of the above bean.
Rest all required data is in place.

When I run this i get following exception
java.lang.ClassCastException: java.lang.String cannot be cast to
org.apache.ws.security.validate.Validator
from UsernameTokenProcessor at line

Validator validator = data.getValidator(WSSecurityEngine.USERNAME_TOKEN);

which gets the validator from UsernameTokenInterceptor.getPrincipal() method

On debugging, it seems that the CustomUserTokenValidator is not loaded via
annotation.

If the same example i did with bean configuration it works fine. Bean
configuration as follows
<bean id="helloWorldService"
class="com.apachecxf.services.HelloWorldServiceBean" />

 	<jaxws:endpoint id="helloWorld" 
 				 implementor="#helloWorldService" 
 				 address="/HelloWorld">	
		
 	<jaxws:properties>
    <entry key="ws-security.ut.validator" 
    	   value-ref="customUserTokenValidator" />
    </jaxws:properties>
    
    <jaxws:inInterceptors>
    	<ref bean="loggingInInterceptor" />	
	</jaxws:inInterceptors>
	<jaxws:outInterceptors>		
		<ref bean="logOutInterceptor" />
	</jaxws:outInterceptors> 
	                       	
 </jaxws:endpoint> 

Please advise for any missing step.



--
View this message in context: http://cxf.547215.n5.nabble.com/Annotation-based-WS-SecurityPolicy-throwing-exception-tp5729540.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: Annotation based WS-SecurityPolicy throwing exception

Posted by Daniel Kulp <dk...@apache.org>.
At this point, the @EndpointProperty annotation can only be used to specify string properties, not classes or objects.  I just committed some updates to trunk/2.7.x that would allow it to ref a configured bean or create a bean if given a class and the bean has an appropriate constructor.  Might be worth giving it a try to see if that would work. 



On Jun 20, 2013, at 1:28 AM, nicky123 <va...@gmail.com> wrote:

> Hello,
> 
> I am working on annotation base ws-securityPolicy and have the following
> annotation on the service bean.
> Note: using cxf version of 2.7.5
> 
> @WebService(endpointInterface = "com.apachecxf.services.HelloWorldService")
> @Policy(uri = "policies/TestImplPolicy.xml")
> @EndpointProperty(key="ws-security.ut.validator",
> value="com.apachecxf.services.CustomUserTokenValidator")
> public class HelloWorldServiceBean implements HelloWorldService {
> 
> 	public String sayHello() {
> 		System.out.println("Hello World!!!");
> 		return "Hello my service is working";
> 	}
> 
> }
> 
> The bean configuration file have just the bean definition of the above bean.
> Rest all required data is in place.
> 
> When I run this i get following exception
> java.lang.ClassCastException: java.lang.String cannot be cast to
> org.apache.ws.security.validate.Validator
> from UsernameTokenProcessor at line
> 
> Validator validator = data.getValidator(WSSecurityEngine.USERNAME_TOKEN);
> 
> which gets the validator from UsernameTokenInterceptor.getPrincipal() method
> 
> On debugging, it seems that the CustomUserTokenValidator is not loaded via
> annotation.
> 
> If the same example i did with bean configuration it works fine. Bean
> configuration as follows
> <bean id="helloWorldService"
> class="com.apachecxf.services.HelloWorldServiceBean" />
> 
> 	<jaxws:endpoint id="helloWorld" 
> 				 implementor="#helloWorldService" 
> 				 address="/HelloWorld">	
> 		
> 	<jaxws:properties>
>    <entry key="ws-security.ut.validator" 
>    	   value-ref="customUserTokenValidator" />
>    </jaxws:properties>
> 
>    <jaxws:inInterceptors>
>    	<ref bean="loggingInInterceptor" />	
> 	</jaxws:inInterceptors>
> 	<jaxws:outInterceptors>		
> 		<ref bean="logOutInterceptor" />
> 	</jaxws:outInterceptors> 
> 	                       	
> </jaxws:endpoint> 
> 
> Please advise for any missing step.
> 
> 
> 
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Annotation-based-WS-SecurityPolicy-throwing-exception-tp5729540.html
> Sent from the cxf-user mailing list archive at Nabble.com.

-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com