You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by June Kobol <ju...@gmail.com> on 2012/04/25 19:04:59 UTC

Can aspectj be used with cxf?

Hi all:

    I got a problem when using aspectj with cxf 2.4.1. As
follows, aopPointCuter cannot intercept accountService's interface. My
spring is 2.5.6.
Can aspectj be used with cxf?

        <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" />
 <bean
class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"
/>
<aop:aspectj-autoproxy />

<bean id="aopPointCuter" class="aop.AopPointCuter">
</bean>
       <jaxws:endpoint id="accountService"
implementor="service.account.impl.AccountServiceImpl"
wsdlLocation="/WEB-INF/wsdl/AccountService.wsdl" address="/AccountService">
</jaxws:endpoint>

@Aspect
public class AopPointCuter implements Ordered {

 @Pointcut("execution(* service.account.AccountService..*(..))")
public void accountService() {
}
@Around("( accountService())")
public Object doSomething(ProceedingJoinPoint joinPoint)
throws Throwable {
                    .........
        }
}

Re: Can aspectj be used with cxf?

Posted by Daniel Kulp <dk...@apache.org>.
On Thursday, April 26, 2012 01:04:59 AM June Kobol wrote:
> Hi all:
> 
>     I got a problem when using aspectj with cxf 2.4.1. As
> follows, aopPointCuter cannot intercept accountService's interface. My
> spring is 2.5.6.
> Can aspectj be used with cxf?

You likely need to get the impl created from Spring as well.  Something 
like:


<bean id="aopPointCuter" class="aop.AopPointCuter">
<bean id="service" class="service.account.impl.AccountServiceImpl">

</bean>
<jaxws:endpoint id="accountService"
      implementor="#service"
      implementorClass="service.account.impl.AccountServiceImpl"
      wsdlLocation="/WEB-INF/wsdl/AccountService.wsdl"
      address="/AccountService"/>

That would allow spring to create the impl bean and apply the aspects and 
such.   CXF would just reference that bean directly.

Note the addition of the implementorClass attribute on jaxws:endpoint.  With 
the aspects, CXF may not be able to get the annotations and such from the 
impl bean itself.  By specifying the class, we can use that class object 
directly to inspect for the annotations.

Dan


> 
>         <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" />
>  <bean
> class="org.springframework.beans.factory.annotation.AutowiredAnnotationBea
> nPostProcessor" />
> <aop:aspectj-autoproxy />
> 
> <bean id="aopPointCuter" class="aop.AopPointCuter">
> </bean>
>        <jaxws:endpoint id="accountService"
> implementor="service.account.impl.AccountServiceImpl"
> wsdlLocation="/WEB-INF/wsdl/AccountService.wsdl"
> address="/AccountService"> </jaxws:endpoint>
> 
> @Aspect
> public class AopPointCuter implements Ordered {
> 
>  @Pointcut("execution(* service.account.AccountService..*(..))")
> public void accountService() {
> }
> @Around("( accountService())")
> public Object doSomething(ProceedingJoinPoint joinPoint)
> throws Throwable {
>                     .........
>         }
> }
-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com