Wildfly-swarm @NameBinding не работает

Я столкнулся со странной проблемой в моем приложении 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 {
   ...
}

Защищенный.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>

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


person Christian Riese    schedule 24.04.2018    source источник
comment
К сожалению не знаю в чем может быть дело. Есть ли ошибки в журнале при работе в WF Swarm?   -  person Ken    schedule 25.04.2018
comment
Ни в одном логе ошибок нет. :( Я просто пытался использовать ‹artifactId›transactions‹/artifactId› из ‹groupId›org.wildfly.swarm‹/groupId›, потому что думал, что забыл какую-то зависимость, но и полный профиль не работает.   -  person Christian Riese    schedule 25.04.2018


Ответы (1)


Глупый я. Я заработал. я только что добавил

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

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

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

person Christian Riese    schedule 28.04.2018
comment
Вы пробовали это без ручного указания дробей? Мне никогда не приходилось вручную регистрировать фильтр в Swarm. - person KG6ZVP; 04.05.2018