On Sun, Dec 29, 2013 at 12:54 AM, Joakim Erdfelt <[email protected]> wrote:

> We fixed some of this with Jetty 9.1.x.
>
> There is now a 
> ServletUpgradeRequest<http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/websocket/servlet/ServletUpgradeRequest.html>that
>  is based on HttpServletRequest.
> Its directly referenced in 
> WebSocketCreator.createWebSocket(ServletUpgradeRequest
> req, ServletUpgradeResponse 
> resp)<http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/websocket/servlet/WebSocketCreator.html#createWebSocket(org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest,%20org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse)>
> ;
>

Ok, this is great. I'll be upgrading to 9.1 soon anyway.


>
> However, its not accessible from within the 
> Session.getUpgradeRequest()<http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/websocket/api/Session.html#getUpgradeRequest()>
> .
> Know that UpgradeRequest is the exposed API, unwrapping and digging into
> the jetty specifics is not a long term, future-proof approach.
>
> You could do something like this (notice that this only uses java classes
> + websocket api classes + junit)
>
> package jetty.websocket;
>
> import java.util.ArrayList;
> import java.util.Collections;
> import java.util.Iterator;
> import java.util.List;
>
> import org.eclipse.jetty.websocket.api.util.QuoteUtil;
> import org.junit.Test;
>
> public class AcceptLanguagesTest
> {
>     public static class QualityValue implements Comparable<QualityValue>
>     {
>         public String value;
>         public double quality;
>
>         public QualityValue(String value, double quality)
>         {
>             this.value = value;
>             this.quality = quality;
>         }
>
>         @Override
>         public int compareTo(QualityValue o)
>         {
>             return (int)((o.quality * 100) - (this.quality * 100));
>         }
>
>         @Override
>         public String toString()
>         {
>             return String.format("%s [quality=%.1f]",value,quality);
>         }
>     }
>
>     @Test
>     public void testAcceptLanguages()
>     {
>         String acceptLangs = "tr-tr,tr;q=0.8,en-us;q=0.5,en;q=0.3";
>         System.out.printf("--] %s%n", acceptLangs);
>         List<QualityValue> values = parseQualityValues(acceptLangs);
>         for (QualityValue value : values)
>         {
>             System.out.println(value);
>         }
>     }
>
>     @Test
>     public void testAcceptLanguagesOdd()
>     {
>         String acceptLangs = "tr-tr,tr;q=0.2,en-us;q=0.9,en;q=0.3";
>         System.out.printf("--] %s%n", acceptLangs);
>         List<QualityValue> values = parseQualityValues(acceptLangs);
>         for (QualityValue value : values)
>         {
>             System.out.println(value);
>         }
>     }
>
>     private List<QualityValue> parseQualityValues(String raw)
>     {
>         List<QualityValue> ret = new ArrayList<>();
>         Iterator<String> parts = QuoteUtil.splitAt(raw,",");
>         while (parts.hasNext())
>         {
>             String part = parts.next();
>             String value = null;
>             double quality = 1.0;
>             Iterator<String> qs = QuoteUtil.splitAt(part,";");
>             while (qs.hasNext())
>             {
>                 String q = qs.next();
>                 if (q.startsWith("q"))
>                 {
>                     int idx = q.indexOf('=');
>                     if (idx > 0)
>                     {
>                         quality = Double.parseDouble(q.substring(idx + 1));
>                     }
>                 }
>                 else
>                  {
>                     value = q;
>                 }
>             }
>             if (value == null)
>             {
>                 value = part;
>             }
>             ret.add(new QualityValue(value,quality));
>         }
>         Collections.sort(ret);
>         return ret;
>      }
> }
>
> Output from this testcase ...
>
> --] tr-tr,tr;q=0.8,en-us;q=0.5,en;q=0.3
> tr-tr [quality=1.0]
> tr [quality=0.8]
> en-us [quality=0.5]
> en [quality=0.3]
> --] tr-tr,tr;q=0.2,en-us;q=0.9,en;q=0.3
> tr-tr [quality=1.0]
> en-us [quality=0.9]
> en [quality=0.3]
> tr [quality=0.2]
>
>
> Now, that being said, exposing either a ..
>
>       List<String> UpgradeRequest.getHeaderValues(String name)
> or   List<WeightedValue> UpgradeRequest.getWeightedHeaderValues(String
> name)
> or   List<String> UpgradeRequest.getUserLocales()
> or   List<WeightedValue> QuoteUtil.parseWeightedValues(String headervalue)
>
> sounds like a reasonable feature / enhancement request.
>
>
> --
> Joakim Erdfelt <[email protected]>
> webtide.com <http://www.webtide.com/> - intalio.com/jetty
> Expert advice, services and support from from the Jetty & CometD experts
> eclipse.org/jetty - cometd.org
>
>
> On Sat, Dec 28, 2013 at 12:57 PM, Nils Kilden-Pedersen 
> <[email protected]>wrote:
>
>> I wanted to reuse the methods for extracting weighted header values. More
>> specifically, I'm trying to get the user locale(s) from the UpgradeRequest
>> on websocket creation.
>>
>>
>> On Sat, Dec 28, 2013 at 3:22 PM, Joakim Erdfelt <[email protected]>wrote:
>>
>>> the org.eclipse.jetty.http.HttpHeader is not exposed by Jetty's
>>> WebSocketServlet, what are you trying to do?
>>>
>>> --
>>> Joakim Erdfelt <[email protected]>
>>> webtide.com <http://www.webtide.com/> - intalio.com/jetty
>>> Expert advice, services and support from from the Jetty & CometD experts
>>> eclipse.org/jetty - cometd.org
>>>
>>>
>>> On Sat, Dec 28, 2013 at 5:20 AM, Nils Kilden-Pedersen 
>>> <[email protected]>wrote:
>>>
>>>> Using 9.0.6, I’m referencing HttpHeader in my web socket servlet, but
>>>> apparently the http classes are not accessible to the servlet.
>>>>
>>>> java.lang.ClassNotFoundException: org.eclipse.jetty.http.HttpHeader
>>>>
>>>> How do I fix this?
>>>>
>>>> _______________________________________________
>>>> jetty-users mailing list
>>>> [email protected]
>>>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>>>>
>>>>
>>>
>>> _______________________________________________
>>> jetty-users mailing list
>>> [email protected]
>>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>>>
>>>
>>
>> _______________________________________________
>> jetty-users mailing list
>> [email protected]
>> https://dev.eclipse.org/mailman/listinfo/jetty-users
>>
>>
>
> _______________________________________________
> jetty-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
>
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to