ByteBuddy和注释

时间:2015-10-15 06:22:17

标签: java byte-buddy

我有一堆在普通JDK上运行的WebServices,我需要拦截所有公共方法才能做某事。有些方法正在使用@WebParam注释。使用ByteBuddy对WebService进行子类化会从覆盖方法中删除@WebParam注释,并且该服务不再按预期工作。

这是一个示例签名

public Something fetch( @WebParam( name="Query" ) QueryCriteria query )

这就是我如何使用ByteBuddy

new ByteBuddy( )
    .subclass( implementationClass )
    .method( isPublic( ).and( isDeclaredBy( implementationClass ) ) )
    .intercept( 
            MethodDelegation.to( new WebServiceInterceptor( ) )
            .andThen( SuperMethodCall.INSTANCE ) )
    .annotateType( implementationClass.getAnnotations( ) )
    .make( )

我知道有一种方法可以注释参数,但它需要有关方法参数的特殊知识(因为只有一些参数被注释)。我想要做的只是要求ByteBuddy注释我的类与超类相同,包括所有重写方法的所有参数。

subclass( implementationClass )
.annotateType( LIKE_SUPERCLASS )
.method( )
.intercept( ... )
.annotateMethod( LIKE_SUPER_INCLUDING_PARAMS )

有什么想法吗?

BR,Paci

1 个答案:

答案 0 :(得分:2)

管理自己找到解决方案。

new ByteBuddy( )
    .withAttribute( new TypeAttributeAppender.ForInstrumentedType( AnnotationAppender.ValueFilter.AppendDefaults.INSTANCE ) )
    .withDefaultMethodAttributeAppender( new MethodAttributeAppender.ForInstrumentedMethod(AnnotationAppender.ValueFilter.AppendDefaults.INSTANCE ) )

会做到这一点。

Br,Paci