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, org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse)>;
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
