On Sun, Feb 4, 2018 at 2:01 PM Sergey Beryozkin <sberyoz...@gmail.com>
wrote:

> I thought I'd point to the utility of that module anyway (by the way, in
> the updated code below the AsyncResponse is also not needed)
>
>
Yep, I know that.  Was seeing the issue either way, and as far as I know
the AsyncResponse approach is the more spec appropriate way.


> In the servlet container you may need to enable the async (via the
> standard servlet param).
>

haha, that was it.  Thanks!


>
> Cheers, Sergey
>
> On 04/02/18 17:59, John D. Ament wrote:
> > Sergey,
> >
> > I think you're mixing emails (the email on dev@ is unrelated).
> >
> > On Sun, Feb 4, 2018 at 12:53 PM Sergey Beryozkin <sberyoz...@gmail.com>
> > wrote:
> >
> >> That dependency you referred to should let you do:
> >>
> >>    @Path("/")
> >>    public class RestController {
> >>         @GET
> >>         @Produces(MediaType.APPLICATION_JSON)
> >>         public Flux 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);
> >>    }
> >>
> >> Not sure why Continuation is not init-ed though, something to do with
> >> the servlet setup
> >>
> >
> > Anything you can suggest to debug through?
> >
> > I'm following the async example I wrote, but within a servlet container
> > (I'm assuming the systests are running a jetty instance).
> >
> >
> >>
> >> Sergey
> >>
> >>
> >>
> >> On 04/02/18 16:16, John D. Ament wrote:
> >>> BTW, sample project can be found @
> >>> https://github.com/johnament/cxf-demo-reactive-cdi
> >>>
> >>>
> >>> On Sun, Feb 4, 2018 at 11:13 AM John D. Ament <johndam...@apache.org>
> >> wrote:
> >>>
> >>>> 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
> >>>>
> >>>>
> >>>
> >>
> >>
> >
>
>

Reply via email to