Author: dkulp Date: Mon Jan 16 18:28:25 2012 New Revision: 1232102 URL: http://svn.apache.org/viewvc?rev=1232102&view=rev Log: Merged revisions 1232094 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes
................ r1232094 | dkulp | 2012-01-16 13:21:24 -0500 (Mon, 16 Jan 2012) | 10 lines Merged revisions 1232089 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1232089 | dkulp | 2012-01-16 13:12:04 -0500 (Mon, 16 Jan 2012) | 2 lines [CXF-4033] Allow interceptors to be added via the annotations using Class objects instead of just strings of classnames. ........ ................ Modified: cxf/branches/2.4.x-fixes/ (props changed) cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/feature/Features.java cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java cxf/branches/2.4.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java Propchange: cxf/branches/2.4.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/feature/Features.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/feature/Features.java?rev=1232102&r1=1232101&r2=1232102&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/feature/Features.java (original) +++ cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/feature/Features.java Mon Jan 16 18:28:25 2012 @@ -26,5 +26,7 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Features { - String[] features(); + String[] features() default { }; + + Class<? extends Feature>[] classes() default { }; } Modified: cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java?rev=1232102&r1=1232101&r2=1232102&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java (original) +++ cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java Mon Jan 16 18:28:25 2012 @@ -23,6 +23,8 @@ import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; + +import org.apache.cxf.message.Message; /** * Specifies a list of classes that are added to the inbound fault * interceptor chain. This annotation effects SEI classes and service @@ -32,5 +34,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface InFaultInterceptors { - String[] interceptors(); + String[] interceptors() default { }; + + Class<? extends Interceptor<? extends Message>>[] classes() default { }; } Modified: cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java?rev=1232102&r1=1232101&r2=1232102&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java (original) +++ cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java Mon Jan 16 18:28:25 2012 @@ -24,6 +24,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.apache.cxf.message.Message; + /** * Specifies a list of classes that are added to the inbound interceptor @@ -34,6 +36,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface InInterceptors { - String[] interceptors(); + String[] interceptors() default { }; + Class<? extends Interceptor<? extends Message>>[] classes() default { }; } Modified: cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java?rev=1232102&r1=1232101&r2=1232102&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java (original) +++ cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java Mon Jan 16 18:28:25 2012 @@ -24,6 +24,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.apache.cxf.message.Message; + /** * Specifies a list of classes that are added to the outbound fault * interceptor chain. This annotation effects SEI classes and service @@ -33,5 +35,8 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface OutFaultInterceptors { - String[] interceptors(); + String[] interceptors() default { }; + + Class<? extends Interceptor<? extends Message>>[] classes() default { }; + } Modified: cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java?rev=1232102&r1=1232101&r2=1232102&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java (original) +++ cxf/branches/2.4.x-fixes/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java Mon Jan 16 18:28:25 2012 @@ -24,6 +24,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.apache.cxf.message.Message; + /** * Specifies a list of classes that are added to the outbound @@ -34,6 +36,8 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) public @interface OutInterceptors { - String[] interceptors(); + String[] interceptors() default { }; + + Class<? extends Interceptor<? extends Message>>[] classes() default { }; } Modified: cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java?rev=1232102&r1=1232101&r2=1232102&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java (original) +++ cxf/branches/2.4.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java Mon Jan 16 18:28:25 2012 @@ -45,12 +45,40 @@ public class AnnotationInterceptors { for (Class<?> cls : clazzes) { Annotation annotation = cls.getAnnotation(annotationClazz); if (annotation != null) { - return initializeAnnotationObjects(getAnnotationObjectNames(annotation), type); + return initializeAnnotationObjects(annotation, type); } } return null; } + private <T> List<T> initializeAnnotationObjects(Annotation annotation, + Class<T> type) { + List<T> list = new ArrayList<T>(); + for (String cn : getAnnotationObjectNames(annotation)) { + list.add(initializeAnnotationObject(cn, type)); + } + for (Class<? extends T> cn : getAnnotationObjectClasses(annotation, type)) { + list.add(initializeAnnotationObject(cn)); + } + return list; + } + + @SuppressWarnings("unchecked") + private <T> Class<? extends T>[] getAnnotationObjectClasses(Annotation ann, Class<T> type) { + if (ann instanceof InFaultInterceptors) { + return (Class<? extends T>[])((InFaultInterceptors)ann).classes(); + } else if (ann instanceof InInterceptors) { + return (Class<? extends T>[])((InInterceptors)ann).classes(); + } else if (ann instanceof OutFaultInterceptors) { + return (Class<? extends T>[])((OutFaultInterceptors)ann).classes(); + } else if (ann instanceof OutInterceptors) { + return (Class<? extends T>[])((OutInterceptors)ann).classes(); + } else if (ann instanceof Features) { + return (Class<? extends T>[])((Features)ann).classes(); + } + throw new UnsupportedOperationException("Doesn't support the annotation: " + ann); + } + private String[] getAnnotationObjectNames(Annotation ann) { if (ann instanceof InFaultInterceptors) { return ((InFaultInterceptors)ann).interceptors(); @@ -67,34 +95,27 @@ public class AnnotationInterceptors { throw new UnsupportedOperationException("Doesn't support the annotation: " + ann); } - private <T> List<T> initializeAnnotationObjects(String[] annotationObjects, Class<T> type) { - List<T> theAnnotationObjects = new ArrayList<T>(); - if (annotationObjects != null && annotationObjects.length > 0) { - for (String annObjectName : annotationObjects) { - Object object = null; - try { - object = ClassLoaderUtils.loadClass(annObjectName, this.getClass()).newInstance(); - theAnnotationObjects.add(type.cast(object)); - } catch (ClassNotFoundException e) { - throw new Fault(new org.apache.cxf.common.i18n.Message( - "COULD_NOT_CREATE_ANNOTATION_OBJECT", - BUNDLE, annObjectName), e); - } catch (InstantiationException ie) { - throw new Fault(new org.apache.cxf.common.i18n.Message( - "COULD_NOT_CREATE_ANNOTATION_OBJECT", - BUNDLE, annObjectName), ie); - } catch (IllegalAccessException iae) { - throw new Fault(new org.apache.cxf.common.i18n.Message( - "COULD_NOT_CREATE_ANNOTATION_OBJECT", - BUNDLE, annObjectName), iae); - } catch (ClassCastException ex) { - throw new Fault(new org.apache.cxf.common.i18n.Message( - "COULD_NOT_CREATE_ANNOTATION_OBJECT", - BUNDLE, annObjectName), ex); - } - } + private <T> T initializeAnnotationObject(String annObjectName, Class<T> type) { + Object object = null; + try { + object = ClassLoaderUtils.loadClass(annObjectName, this.getClass()).newInstance(); + return type.cast(object); + } catch (Throwable e) { + throw new Fault(new org.apache.cxf.common.i18n.Message( + "COULD_NOT_CREATE_ANNOTATION_OBJECT", + BUNDLE, annObjectName), e); + } + } + private <T> T initializeAnnotationObject(Class<T> type) { + Object object = null; + try { + object = type.newInstance(); + return type.cast(object); + } catch (Throwable e) { + throw new Fault(new org.apache.cxf.common.i18n.Message( + "COULD_NOT_CREATE_ANNOTATION_OBJECT", + BUNDLE, type.getName()), e); } - return theAnnotationObjects; } @SuppressWarnings("unchecked") Modified: cxf/branches/2.4.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java?rev=1232102&r1=1232101&r2=1232102&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java (original) +++ cxf/branches/2.4.x-fixes/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java Mon Jan 16 18:28:25 2012 @@ -212,10 +212,10 @@ public class AnnotationInterceptorTest e return flag; } - @InInterceptors(interceptors = "org.apache.cxf.jaxws.service.TestInterceptor") - @OutFaultInterceptors (interceptors = {"org.apache.cxf.jaxws.service.TestInterceptor" , - "org.apache.cxf.jaxws.service.Test2Interceptor" }) - @Features (features = "org.apache.cxf.jaxws.service.AnnotationFeature") + @InInterceptors(classes = org.apache.cxf.jaxws.service.TestInterceptor.class) + @OutFaultInterceptors (classes = {org.apache.cxf.jaxws.service.TestInterceptor.class , + org.apache.cxf.jaxws.service.Test2Interceptor.class }) + @Features (classes = org.apache.cxf.jaxws.service.AnnotationFeature.class) public class HelloServiceImpl implements HelloService { public String sayHi() { return "HI"; @@ -290,7 +290,7 @@ public class AnnotationInterceptorTest e } @WebService(endpointInterface = "org.apache.cxf.jaxws.service.SayHiInterface") - @InInterceptors (interceptors = "org.apache.cxf.jaxws.service.Test2Interceptor") + @InInterceptors (classes = org.apache.cxf.jaxws.service.Test2Interceptor.class) public class SayHiInterfaceImpl2 implements SayHiInterface { public String sayHi(String s) { return "HI";
