You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Martin Grigorov (JIRA)" <ji...@apache.org> on 2013/08/13 11:16:50 UTC
[jira] [Resolved] (WICKET-5280) HttpsMapper Could not resolve
protocol for request "WebSocket"
[ https://issues.apache.org/jira/browse/WICKET-5280?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Grigorov resolved WICKET-5280.
-------------------------------------
Resolution: Cannot Reproduce
Please provide a quickstart and we will reopen the ticket.
> HttpsMapper Could not resolve protocol for request "WebSocket"
> --------------------------------------------------------------
>
> Key: WICKET-5280
> URL: https://issues.apache.org/jira/browse/WICKET-5280
> Project: Wicket
> Issue Type: Bug
> Components: wicket, wicket-atmosphere
> Affects Versions: 6.9.1
> Environment: wicket-atmosphere 0.11, Tomcat 7.0
> Reporter: Hendy Irawan
> Assignee: Emond Papegaaij
>
> HttpsMapper, with or without XForwardedRequestWrapper, seems to be problematic when combined with Atmosphere via WebSocket :
> {code}
> java.lang.IllegalStateException
> Could not resolve protocol for request: org.apache.wicket.protocol.http.servlet.XForwardedRequestWrapper@cbb5077
> {code}
> Or without XForwardedRequestWrapper:
> {code}
> java.lang.IllegalStateException
> Could not resolve protocol for request: c244911c-d8aa-4d66-a645-2ef935199b78
> at org.apache.wicket.protocol.https.HttpsMapper.getSchemeOf(HttpsMapper.java:215) ~[wicket-core-6.9.1.jar:6.9.1]
> at org.apache.wicket.protocol.https.HttpsMapper.mapHandler(HttpsMapper.java:167) ~[wicket-core-6.9.1.jar:6.9.1]
> at org.apache.wicket.protocol.https.HttpsMapper.mapHandler(HttpsMapper.java:112) ~[wicket-core-6.9.1.jar:6.9.1]
> {code}
> although page "seems" operating normally, but it gives ERROR logs.
> I think this is due to Atmosphere & HttpsMapper not detecting the scheme correctly? (ws/wss? actually "WebSocket")
> {code}
> protected Scheme getSchemeOf(Request request)
> {
> HttpServletRequest req = (HttpServletRequest) request.getContainerRequest();
> if ("https".equalsIgnoreCase(req.getScheme()))
> {
> return Scheme.HTTPS;
> }
> else if ("http".equalsIgnoreCase(req.getScheme()))
> {
> return Scheme.HTTP;
> }
> else
> {
> throw new IllegalStateException("Could not resolve protocol for request: " + req);
> }
> }
> {code}
> I workaround it using:
> {code}
> setRootRequestMapper(new HttpsMapper(getRootRequestMapper(), new HttpsConfig(8980, 8943)) {
> @Override
> protected Scheme getSchemeOf(Request request) {
> HttpServletRequest req = (HttpServletRequest) request.getContainerRequest();
> log.info("Scheme for {} is {}", req, req.getScheme());
>
> if ("https".equalsIgnoreCase(req.getScheme()))
> {
> return Scheme.HTTPS;
> }
> else if ("http".equalsIgnoreCase(req.getScheme()))
> {
> return Scheme.HTTP;
> }
> else if ("WebSocket".equalsIgnoreCase(req.getScheme()))
> {
> return Scheme.ANY;
> }
> else
> {
> throw new IllegalStateException("Could not resolve protocol for request: " + req
> + ", unrecognized scheme: " + req.getScheme());
> }
> }
> });
> {code}
> If the above is proper way to do it, please update the {{HttpsMapper}} implementation, also with more detailed exception message above ("unrecognized scheme").
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira