I built a simple webapp (WAR file, deploying to Tomcat) that depends on the CXF 3.2.2 libraries + Weld 3.0.2. I don't believe CDI has anything to do with my problem though.
I registered a feature/server customizer that can deal with the invoker logic required, and provided a rest controller that simply invokes the postman echo service Feature/Extension: @ApplicationScoped public class MyAppFeature implements Feature, JAXRSServerFactoryCustomizationExtension { public boolean configure(FeatureContext featureContext) { featureContext.register(JsrProvider.class); featureContext.register(ReactorInvokerProvider.class); return true; } @Override public void customize(JAXRSServerFactoryBean jaxrsServerFactoryBean) { ReactorInvoker invoker = new ReactorInvoker(); invoker.setUseStreamingSubscriberIfPossible(false); jaxrsServerFactoryBean.setInvoker(invoker); StreamingResponseProvider<JsonObject> streamProvider = new StreamingResponseProvider<>(); streamProvider.setProduceMediaTypes(Collections.singletonList("application/json")); jaxrsServerFactoryBean.setProvider(streamProvider); jaxrsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); } } RestController: @RequestScoped @Path("/") public class RestController { @GET @Produces(MediaType.APPLICATION_JSON) public void doGet(@Suspended AsyncResponse asyncResponse) { ClientBuilder.newClient() .register(MyAppFeature.class) .target("https://postman-echo.com/get") .queryParam("arg1", "arg1") .queryParam("arg2", "arg2") .request(MediaType.APPLICATION_JSON_TYPE) .rx(ReactorInvoker.class) .get(JsonObject.class) .subscribe(new JsonStreamingAsyncSubscriber<>(asyncResponse)); } } When I attempt to invoke this endpoint, I see a NPE in the logs 04-Feb-2018 11:07:20.245 WARNING [http-nio-8080-exec-69] org.apache.cxf.phase.PhaseInterceptorChain.doDefaultLogging Interceptor for {http://rest.mycompany.com/}RestController has thrown exception, unwinding now java.lang.NullPointerException at org.apache.cxf.jaxrs.impl.AsyncResponseImpl.initContinuation(AsyncResponseImpl.java:306) at org.apache.cxf.jaxrs.impl.AsyncResponseImpl.<init>(AsyncResponseImpl.java:68) at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:826) at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:795) at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:214) at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:78) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267) at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160) at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:191) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:301) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:225) at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:276) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Is there anything else that needs to happen to register the invoker to handle async responses? John