Wildfly-swarm @NameBinding не работает - PullRequest
0 голосов
/ 25 апреля 2018

Я столкнулся со странной проблемой с моим приложением wildfly-swarm.У меня есть службы JAX-RS, Annotation и 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) {
        ...
    }
}

Насколько я понимаю, FooFilter.filter () должен вызываться каждый раз, когда запрашивается GET / foo.С 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>

Заранее спасибо!

1 Ответ

0 голосов
/ 28 апреля 2018

Глупый я.Я получил это работает.Я просто добавил

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

в мой класс Application.Wildfly Swarm основан на Wildfly 11, а не 12. 11 использует RestEasy 3.0.24 в качестве реализации JAX-RS, 12 использует RestEasy 3.5.

Кажется, что RestEasy 3.0.24 необходимо зарегистрировать RequestFilter вручную, тогда как 3.5не нужно.

...