Wildfly-swarm @NameBinding 不工作

Wildfly-swarm @NameBinding not working

我的 wildfly-swarm 应用程序遇到了一个奇怪的问题。 我有一个 JAX-RS 服务、注释和 RequestFilter 定义如下

FooService.java

@Path("/foo")
@RequestScoped
@Api(value = "foo")
public class FooService extends BaseService {

    @GET
    @Produces({MediaType.APPLICATION_JSON})
    @ApiOperation(...)
    @ApiResponses(...)
    @Secured({UserGroup.USER})
    public Response getBar(@ApiParam(...) @QueryParam("id") int id) {
        return Response.ok("bar").build();
    }
}

BaseService.java

public class BaseService {
   ...
}

Secured.java

@NameBinding
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Secured {
    UserGroup[] value() default {};
}

FooFilter.java

@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class FooFilter extends BaseService implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) {
        ...
    }
}

据我所知,每次请求 GET/foo 时都应调用 FooFilter.filter() 。使用 Wildfly 12 一切正常,但 运行 我的 wildfly-swarm 应用程序 FooFilter.filter() 从未被调用。 有什么建议吗?

为了完整起见,这里是我的 pom 文件中的依赖项。

   <!-- Java EE 7 dependency -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- WildFly Swarm Fractions -->
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>cdi</artifactId>
    </dependency>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>ejb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>jaxrs</artifactId>
    </dependency>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.wildfly.swarm</groupId>
                <artifactId>h2</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>transactions</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${version.mysql}</version>
    </dependency>

提前致谢!

愚蠢的我。我让它工作了。 我刚刚添加了

public Set<Class<?>> getClasses() {
    Set<Class<?>> classes = new HashSet<>();
    //Filter
    classes.add(FooFilter.class);
    return classes;
}

到我的申请 class。 Wildfly swarm 基于 Wildfly 11 而不是 12。11 使用 RestEasy 3.0.24 作为 JAX-RS 实现,12 使用 RestEasy 3.5。

RestEasy 3.0.24好像需要手动注册一个RequestFilter,而3.5不需要。