You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by "Jeff.Yu" <je...@iona.com> on 2007/07/26 04:04:04 UTC

Re: svn commit: r559358 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/interceptor/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/ rt/frontend/simple/src/main/java/org/apache/cxf...

Hi, Glen

Thanks for your comments, I will update it accordingly in the next 
patch, since I will add another annotation: @Feature.

Thanks
Jeff Yu


Glen Mazza wrote:
> Am Mittwoch, den 25.07.2007, 08:48 +0000 schrieb ffang@apache.org:
>
>   
>> Author: ffang
>> Date: Wed Jul 25 01:48:45 2007
>> New Revision: 559358
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=559358
>> Log:
>> [CXF-803] apply patch provided by Jeff Yu
>>
>> Added:
>> incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java
>> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java?view=auto&rev=559358
>> ==============================================================================
>> --- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java (added)
>> +++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java Wed Jul 25 01:48:45 2007
>> @@ -0,0 +1,127 @@
>> +/**
>> +
>> +package org.apache.cxf.interceptor;
>> +
>> +import java.lang.annotation.Annotation;
>> +import java.util.ArrayList;
>> +import java.util.List;
>> +import java.util.ResourceBundle;
>> +
>> +import javax.jws.WebService;
>> +
>> +import org.apache.cxf.common.classloader.ClassLoaderUtils;
>> +import org.apache.cxf.common.i18n.BundleUtils;
>> +import org.apache.cxf.common.i18n.Message;
>> +import org.apache.cxf.common.util.StringUtils;
>> +import org.apache.cxf.endpoint.EndpointException;
>> +
>> +public class AnnotationInterceptors {
>> +    
>> +    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(AnnotationInterceptors.class);
>> +    
>> +    private Class<?> clazz;
>> +    
>> +    public AnnotationInterceptors(Class<?> clz) {
>> +        clazz = clz;
>> +    }
>> +    
>> +    public List<Interceptor> getInFaultInterceptors() throws EndpointException {
>> +        return getInterceptors(InFaultInterceptors.class);
>> +    }
>> +    
>> +    @SuppressWarnings (value = "unchecked")
>> +    private List<Interceptor> getInterceptors(Class clz) throws EndpointException {
>> +        Annotation  annotation = clazz.getAnnotation(clz);
>> +        if (annotation != null) {
>> +            return initializeInterceptors(getInterceptorNames(annotation));
>> +        } else {
>>     
>
> Here, annotation = null means there are no annotations of "clz"
> interceptor type tied to the "clazz".  Standard, easy to understand.
>
>
>   
>> +            WebService ws = clazz.getAnnotation(WebService.class);
>> +            if (ws != null && !StringUtils.isEmpty(ws.endpointInterface())) {
>> +                String seiClassName = ws.endpointInterface().trim();
>> +                Class seiClass = null;
>> +                try {
>> +                    seiClass = ClassLoaderUtils.loadClass(seiClassName, this.getClass());
>> +                } catch (ClassNotFoundException e) {
>> +                    throw new RuntimeException("couldnt find class :" + seiClass, e);
>> +                }
>> +                annotation = seiClass.getAnnotation(clz);
>> +                if (annotation != null) {
>> +                    return initializeInterceptors(getInterceptorNames(annotation));
>> +                }
>> +            }           
>> +        }
>> +        return new ArrayList<Interceptor>();
>> +    }
>>     
>
>
> Here, we aren't using "null" but an empty list to signify this.
> Is this new list going to be used anywhere, if it is empty (i.e., will
> items be further added to this list downstream?)  If not, I think it
> would be faster and more robust to just return "null" in this case
> instead of creating empty items.  (This would also need to be changed in
> initializeInterceptors()--just return a null instead of an empty list.)
>
>
>
>   
>> Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
>> URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java?view=diff&rev=559358&r1=559357&r2=559358
>> ==============================================================================
>> --- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java (original)
>> +++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java Wed Jul 25 01:48:45 2007
>>     
>
>   
>> +    
>> +    protected boolean initializeAnnotationInterceptors(Endpoint ep, Class<?> clazz) throws EndpointException {
>> +        boolean hasAnnotation = false;
>> +        AnnotationInterceptors provider = new AnnotationInterceptors(clazz);
>> +        if (provider.getInFaultInterceptors().size() > 0) {
>> +            ep.getInFaultInterceptors().addAll(provider.getInFaultInterceptors());
>> +            hasAnnotation = true;
>> +        }
>> +        if (provider.getInInterceptors().size() > 0) {
>> +
>> ep.getInInterceptors().addAll(provider.getInInterceptors());
>> +            hasAnnotation = true;
>> +        }
>> +        if (provider.getOutFaultInterceptors().size() > 0) {
>> +
>> ep.getOutFaultInterceptors().addAll(provider.getOutFaultInterceptors());
>> +            hasAnnotation = true;
>> +        }
>> +        if (provider.getOutInterceptors().size() > 0) {
>> +
>> ep.getOutInterceptors().addAll(provider.getOutInterceptors());
>> +            hasAnnotation = true;
>> +        }
>> +        return hasAnnotation;
>>      } 
>>     
>
> With this change, the ifs above would simplify to:  
> if (provider.getXXXXInterceptors()) { }
>
> Regards,
> Glen
>
>
>