В последние пару дней я пытался настроить встроенный сервер 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 в качестве ссылки
и инъекция там работает, но есть две вещи, которые делают этот пример частично подходящим для меня
- Пример использования простого HttpServlet, а не надлежащего сервлета JAX-RS.
- «BeanManager» вводится, но попытка внедрить мой собственный объект с треском проваливается (используется с @ApplicationScope)
Я настроил полное репо с тестами, чтобы упростить процесс, помогая указать мне на мою ошибку.
https://github.com/eladchen/rest-easy-cdi
Что касается бонусных баллов, мне было интересно, можно ли работать со сваркой в обоих контекстах SE и EE, и если да, то как?