request forwarding with ServletHttpHandlerAdapter spring web-flux in servlet 3.1 container





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















As per documentation on servlet 3.1 container ServletHttpHandlerAdapter can be registered as a servlet and can support nio.
I need to forward request to some other resource as below



asyncContext.getRequest().getServletContext().getRequestDispatcher("/OtherResource")
.forward(asyncContext.getRequest(), asyncContext.getResponse());


on calling forward i'm getting below error.



java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:624)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
at com.nucleus.OtherServlet.doGet(OtherServlet.java:30)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
at com.nucleus.AsyncRequestProcessor.run(AsyncRequestProcessor.java:55)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


Which is correct as spring creates org.springframework.http.server.reactive.ServletServerHttpResponse and calls response.getOutputStream() initially, now how to support request forwarding?



Issue also logged to spring jira for discussion - Link










share|improve this question































    0















    As per documentation on servlet 3.1 container ServletHttpHandlerAdapter can be registered as a servlet and can support nio.
    I need to forward request to some other resource as below



    asyncContext.getRequest().getServletContext().getRequestDispatcher("/OtherResource")
    .forward(asyncContext.getRequest(), asyncContext.getResponse());


    on calling forward i'm getting below error.



    java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:624)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
    at com.nucleus.OtherServlet.doGet(OtherServlet.java:30)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
    at com.nucleus.AsyncRequestProcessor.run(AsyncRequestProcessor.java:55)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)


    Which is correct as spring creates org.springframework.http.server.reactive.ServletServerHttpResponse and calls response.getOutputStream() initially, now how to support request forwarding?



    Issue also logged to spring jira for discussion - Link










    share|improve this question



























      0












      0








      0








      As per documentation on servlet 3.1 container ServletHttpHandlerAdapter can be registered as a servlet and can support nio.
      I need to forward request to some other resource as below



      asyncContext.getRequest().getServletContext().getRequestDispatcher("/OtherResource")
      .forward(asyncContext.getRequest(), asyncContext.getResponse());


      on calling forward i'm getting below error.



      java.lang.IllegalStateException: getOutputStream() has already been called for this response
      at org.apache.catalina.connector.Response.getWriter(Response.java:624)
      at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
      at com.nucleus.OtherServlet.doGet(OtherServlet.java:30)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
      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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
      at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470)
      at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
      at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
      at com.nucleus.AsyncRequestProcessor.run(AsyncRequestProcessor.java:55)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      at java.lang.Thread.run(Unknown Source)


      Which is correct as spring creates org.springframework.http.server.reactive.ServletServerHttpResponse and calls response.getOutputStream() initially, now how to support request forwarding?



      Issue also logged to spring jira for discussion - Link










      share|improve this question
















      As per documentation on servlet 3.1 container ServletHttpHandlerAdapter can be registered as a servlet and can support nio.
      I need to forward request to some other resource as below



      asyncContext.getRequest().getServletContext().getRequestDispatcher("/OtherResource")
      .forward(asyncContext.getRequest(), asyncContext.getResponse());


      on calling forward i'm getting below error.



      java.lang.IllegalStateException: getOutputStream() has already been called for this response
      at org.apache.catalina.connector.Response.getWriter(Response.java:624)
      at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
      at com.nucleus.OtherServlet.doGet(OtherServlet.java:30)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
      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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
      at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470)
      at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
      at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
      at com.nucleus.AsyncRequestProcessor.run(AsyncRequestProcessor.java:55)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
      at java.lang.Thread.run(Unknown Source)


      Which is correct as spring creates org.springframework.http.server.reactive.ServletServerHttpResponse and calls response.getOutputStream() initially, now how to support request forwarding?



      Issue also logged to spring jira for discussion - Link







      spring-webflux servlet-3.0 spring-web servlet-3.1






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 6 at 8:38







      gajendra kumar

















      asked Jan 4 at 6:36









      gajendra kumargajendra kumar

      549622




      549622
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Spring WebFlux can be deployed on a Servlet 3.1 container thanks to the ServletHttpHandlerAdapter - but it doesn't mean you are allowed to use Servlet specific APIs in that application.



          First, once you're using the async I/O Servlet features you're not allowed to mix them with blocking I/O calls on the Servlet API (see this presentation about Servlet 3.1 async IO).



          So in general, you should never try and fetch Servlet-specific objects from the ServerWebExchange, but rather code against this new HTTP foundation in Spring WebFlux.



          There is an issue about supporting forwarding at the WebFlux level, but I'm not sure this would ultimately solve your problem. I don't understand the specifics of the issue you're hitting, but Spring WebFlux already supports templating engines that use blocking I/O (see Freemarker support here).



          If the templating engine you're trying to support is tied to Servlet, then you won't be able to get proper WebFlux support as you can run Spring WebFlux applications on non-servlet environments.






          share|improve this answer
























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54034108%2frequest-forwarding-with-servlethttphandleradapter-spring-web-flux-in-servlet-3-1%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Spring WebFlux can be deployed on a Servlet 3.1 container thanks to the ServletHttpHandlerAdapter - but it doesn't mean you are allowed to use Servlet specific APIs in that application.



            First, once you're using the async I/O Servlet features you're not allowed to mix them with blocking I/O calls on the Servlet API (see this presentation about Servlet 3.1 async IO).



            So in general, you should never try and fetch Servlet-specific objects from the ServerWebExchange, but rather code against this new HTTP foundation in Spring WebFlux.



            There is an issue about supporting forwarding at the WebFlux level, but I'm not sure this would ultimately solve your problem. I don't understand the specifics of the issue you're hitting, but Spring WebFlux already supports templating engines that use blocking I/O (see Freemarker support here).



            If the templating engine you're trying to support is tied to Servlet, then you won't be able to get proper WebFlux support as you can run Spring WebFlux applications on non-servlet environments.






            share|improve this answer




























              0














              Spring WebFlux can be deployed on a Servlet 3.1 container thanks to the ServletHttpHandlerAdapter - but it doesn't mean you are allowed to use Servlet specific APIs in that application.



              First, once you're using the async I/O Servlet features you're not allowed to mix them with blocking I/O calls on the Servlet API (see this presentation about Servlet 3.1 async IO).



              So in general, you should never try and fetch Servlet-specific objects from the ServerWebExchange, but rather code against this new HTTP foundation in Spring WebFlux.



              There is an issue about supporting forwarding at the WebFlux level, but I'm not sure this would ultimately solve your problem. I don't understand the specifics of the issue you're hitting, but Spring WebFlux already supports templating engines that use blocking I/O (see Freemarker support here).



              If the templating engine you're trying to support is tied to Servlet, then you won't be able to get proper WebFlux support as you can run Spring WebFlux applications on non-servlet environments.






              share|improve this answer


























                0












                0








                0







                Spring WebFlux can be deployed on a Servlet 3.1 container thanks to the ServletHttpHandlerAdapter - but it doesn't mean you are allowed to use Servlet specific APIs in that application.



                First, once you're using the async I/O Servlet features you're not allowed to mix them with blocking I/O calls on the Servlet API (see this presentation about Servlet 3.1 async IO).



                So in general, you should never try and fetch Servlet-specific objects from the ServerWebExchange, but rather code against this new HTTP foundation in Spring WebFlux.



                There is an issue about supporting forwarding at the WebFlux level, but I'm not sure this would ultimately solve your problem. I don't understand the specifics of the issue you're hitting, but Spring WebFlux already supports templating engines that use blocking I/O (see Freemarker support here).



                If the templating engine you're trying to support is tied to Servlet, then you won't be able to get proper WebFlux support as you can run Spring WebFlux applications on non-servlet environments.






                share|improve this answer













                Spring WebFlux can be deployed on a Servlet 3.1 container thanks to the ServletHttpHandlerAdapter - but it doesn't mean you are allowed to use Servlet specific APIs in that application.



                First, once you're using the async I/O Servlet features you're not allowed to mix them with blocking I/O calls on the Servlet API (see this presentation about Servlet 3.1 async IO).



                So in general, you should never try and fetch Servlet-specific objects from the ServerWebExchange, but rather code against this new HTTP foundation in Spring WebFlux.



                There is an issue about supporting forwarding at the WebFlux level, but I'm not sure this would ultimately solve your problem. I don't understand the specifics of the issue you're hitting, but Spring WebFlux already supports templating engines that use blocking I/O (see Freemarker support here).



                If the templating engine you're trying to support is tied to Servlet, then you won't be able to get proper WebFlux support as you can run Spring WebFlux applications on non-servlet environments.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 5 at 13:53









                Brian ClozelBrian Clozel

                32.6k880106




                32.6k880106
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54034108%2frequest-forwarding-with-servlethttphandleradapter-spring-web-flux-in-servlet-3-1%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas