[ 
https://issues.apache.org/jira/browse/WICKET-5280?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13718311#comment-13718311
 ] 

Martin Grigorov commented on WICKET-5280:
-----------------------------------------

Please attach quickstart application.
Thanks!
                
> 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

Reply via email to