Встроенный CDI JAX-RS (Undertow, RestEasy & Weld) - PullRequest
0 голосов
/ 07 ноября 2018

В последние пару дней я пытался настроить встроенный сервер Undertow с JAX-RS с использованием RestEasy и CDI с использованием сварки.

Неважно, что я делаю, похоже, ничего не работает Я прочитал все возможные ответы и доступные демо-версии; Ничего не сработало!

Ресурс JAX-RS:

@Path("/")
@Produces(MediaType.TEXT_PLAIN)
@RequestScoped
public class EchoResource {
    @Inject
    @Named("upperCase")
    private UpperCaseTextProcessing upperCaseTextProcessing;

    @Inject
    @Named("lowerCase")
    private LowerCaseTextProcessing lowerCaseTextProcessing;

    @Inject
    BeanManager manager;

    @GET
    public void greet( @Suspended AsyncResponse response, @BeanParam Aggregator queryParams ) {
        final Response.ResponseBuilder responseBuilder = Response.ok();

        if ( queryParams.async ) {
            CompletableFuture.runAsync( () -> {
                try {
                    Thread.sleep( 1500 );
                }
                catch ( InterruptedException e ) {
                    e.printStackTrace();
                }

                responseBuilder.entity( upperCaseTextProcessing.processText( queryParams.message ) );

                response.resume( responseBuilder.build() );
            } );
        }
        else {
            responseBuilder.entity( upperCaseTextProcessing.processText( queryParams.message ) );

            response.resume( responseBuilder.build() );
        }
    }

    public static class Aggregator {
        @QueryParam("async")
        public boolean async;

        @QueryParam("msg")
        public String message;

        @QueryParam("lower")
        @DefaultValue("false")
        public boolean lower;
    }
}

Компонент "UpperCaseTextProcessing":

@ApplicationScoped
@Named( "upperCase" )
public class UpperCaseTextProcessing implements TextProcessing {
    public UpperCaseTextProcessing() {}

    @Override
    public String processText( String text ) {
        return text.toUpperCase();
    }
}

Я использовал http://docs.jboss.org/weld/reference/latest/en-US/html/environments.html#_undertow в качестве ссылки и инъекция там работает, но есть две вещи, которые делают этот пример частично подходящим для меня

  1. Пример использования простого HttpServlet, а не надлежащего сервлета JAX-RS.
  2. «BeanManager» вводится, но попытка внедрить мой собственный объект с треском проваливается (используется с @ApplicationScope)

Я настроил полное репо с тестами, чтобы упростить процесс, помогая указать мне на мою ошибку.

https://github.com/eladchen/rest-easy-cdi

Что касается бонусных баллов, мне было интересно, можно ли работать со сваркой в ​​обоих контекстах SE и EE, и если да, то как?

...