Great! On 1/1/07, yongguang zhao <[EMAIL PROTECTED]> wrote:
I use the first option as you said, and it works. Thanks again,Brice! :-) 2007/1/1, Brice Ruth <[EMAIL PROTECTED]>: > > Ah, OK - I think you have two options. > > 1. The serviceBean you provide to XFireExporter should be the bean > you create with the ProxyFactoryBean - rename echoBean to echoTarget and > rename LoggingAOPProxy to echoBean > 2. Use one of Spring's 'in place' proxy factories - like > BeanNameProxyFactory (look at the Spring docs for the exact name) which will > replace the echoBean in the Spring context with the proxied bean, so no > unproxied bean should be available for XFire to grab. > > Either of those options should get you on the road to success. Good > luck! > > Brice > > On 12/31/06, yongguang zhao < [EMAIL PROTECTED] > wrote: > > > > Thanks for your reply,Brice! > > Actually, my app is almost the same as the spring example in the > > xfire-distribution-1.2.3.zip, what I want is just to put spring aop > > into work. > > as in the xfire-servlet.xml: > > > > <?xml version="1.0" encoding="UTF-8"?> > > <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd > > "> > > <beans> > > <!-- START SNIPPET: xfire --> > > <bean class=" > > org.springframework.web.servlet.handler.SimpleUrlHandlerMapping "> > > <property name="urlMap"> > > <map> > > <entry key="/EchoService"> > > <ref bean="echo"/> > > </entry> > > </map> > > </property> > > </bean> > > > > <!-- Declare a parent bean with all properties common to both > > services --> > > <bean id="echo" class=" > > org.codehaus.xfire.spring.remoting.XFireExporter"> > > <property name="serviceFactory"> > > <ref bean="xfire.serviceFactory"/> > > </property> > > <property name="xfire"> > > <ref bean="xfire"/> > > </property> > > <property name="serviceBean"> > > <ref bean="echoBean"/> > > </property> > > <property name="serviceClass"> > > <value>org.codehaus.xfire.spring.example.Echo</value> > > </property> > > </bean> > > <!-- END SNIPPET: xfire --> > > </beans> > > I think that XFireExporter takes control of "echoBean" and make some > > proxy beans using it , which handle http request. > > While my spring advice only intercept "echoBean", so there is no > > effect. > > Is it right? And what should I do to make it works? > > > > > > 2006/12/31, Brice Ruth <[EMAIL PROTECTED]>: > > > > > > I'm not sure about the xfire-servlet mechanism, but when we first > > > started using Spring AOP with XFire + JSR-181 + Jsr181BeanPostProcessor, we > > > found that the Jsr181BeanPostProcessor was grabbing the service bean before > > > the AOP advice had been wrapped around it. Order is very important, since > > > the advice is applied at runtime to an object (by creating a proxy) - not to > > > the class, which is how many folks learn to use AOP. With Spring AOP, you > > > can easily have an object with and without the advice you've created, which > > > isn't the case with compile-time weaving. > > > > > > xfire-servlet is either not looking at your Spring context bean at > > > all (its instantiating it purely from some configuration), or its grabbing > > > your Spring context bean before its been advised. I can't really tell w/o > > > know more about how xfire-servlet configuration works and what else you have > > > in your Spring context related to XFire. > > > > > > Cheers, > > > Brice > > > > > > On 12/31/06, yongguang zhao <[EMAIL PROTECTED] > wrote: > > > > > > > > Hi, > > > > I want to add some logging functionality to the XFire spring > > > > example--Echo, > > > > that is, after some client invokes the Echo service, I want to log > > > > something. > > > > I think Spring AOP is the best choice, > > > > here is my applicationContext.xml: > > > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > > <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd > > > > "> > > > > <beans> > > > > <bean id="echoBean" class=" > > > > org.codehaus.xfire.spring.example.EchoImpl"/> > > > > <bean id="LoggingInterceptor" class="com.xyz.LoggingAdvice"/> > > > > > > > > <bean id="LoggingPointcutAdvisor" class=" > > > > org.springframework.aop.support.DefaultPointcutAdvisor "> > > > > <property name="advice"> > > > > <ref local="LoggingInterceptor"/> > > > > </property> > > > > <property name="pointcut"> > > > > <bean class=" > > > > org.springframework.aop.support.JdkRegexpMethodPointcut"> > > > > <property name="pattern"> > > > > <value>.*</value> > > > > </property> > > > > </bean> > > > > </property> > > > > </bean> > > > > <bean id="LoggingAOPProxy" class=" > > > > org.springframework.aop.framework.ProxyFactoryBean"> > > > > <property name="target"> > > > > <ref local="echoBean" /> > > > > </property> > > > > <property name="interceptorNames"> > > > > <list> > > > > <value>LoggingPointcutAdvisor</value> > > > > </list> > > > > </property> > > > > </bean> > > > > </beans> > > > > the LoggingAdvice mentioned before is simple: > > > > > > > > package com.xyz; > > > > > > > > import java.lang.reflect.Method; > > > > > > > > import org.apache.commons.logging.Log; > > > > import org.apache.commons.logging.LogFactory; > > > > import org.apache.log4j.Logger; > > > > import org.springframework.aop.AfterReturningAdvice; > > > > import org.springframework.aop.MethodBeforeAdvice ; > > > > > > > > public class LoggingAdvice implements MethodBeforeAdvice, > > > > AfterReturningAdvice { > > > > private static Log log = LogFactory.getLog(LoggingAdvice.class); > > > > > > > > public void before(Method method, Object[] args, Object target) > > > > throws Throwable { > > > > log.debug("before"); > > > > } > > > > > > > > public void afterReturning(Object retuVal, Method method, > > > > Object[] args, > > > > Object target) throws Throwable { > > > > log.debug("afterReturning"); > > > > } > > > > } > > > > while xfire-servlet.xml is the same as in the example. > > > > > > > > However the interceptor just does not work, > > > > can anyone please help me? > > > > > > > > thanks. > > > > > > > > > > > > > > > > > > > > -- > > > Brice Ruth > > > Software Engineer, Madison WI > > > > > > > > > -- > Brice Ruth > Software Engineer, Madison WI >
-- Brice Ruth Software Engineer, Madison WI
