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;
}
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
add a comment |
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
add a comment |
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
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
spring-webflux servlet-3.0 spring-web servlet-3.1
edited Jan 6 at 8:38
gajendra kumar
asked Jan 4 at 6:36
gajendra kumargajendra kumar
549622
549622
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
add a comment |
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.
add a comment |
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.
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.
answered Jan 5 at 13:53
Brian ClozelBrian Clozel
32.6k880106
32.6k880106
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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