You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2012/04/23 14:15:03 UTC
svn commit: r1329200 - in /cxf/branches/2.3.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/
Author: sergeyb
Date: Mon Apr 23 12:15:02 2012
New Revision: 1329200
URL: http://svn.apache.org/viewvc?rev=1329200&view=rev
Log:
Merged revisions 1329185 via svnmerge from
https://svn.apache.org/repos/asf/cxf/branches/2.4.x-fixes
................
r1329185 | sergeyb | 2012-04-23 12:18:09 +0100 (Mon, 23 Apr 2012) | 20 lines
Merged revisions 1329183 via svnmerge from
https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes
................
r1329183 | sergeyb | 2012-04-23 12:11:55 +0100 (Mon, 23 Apr 2012) | 13 lines
Merged revisions 1329178,1329180 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1329178 | sergeyb | 2012-04-23 12:07:09 +0100 (Mon, 23 Apr 2012) | 1 line
[CXF-4243] Fixing Request.selectVariant implementation
........
r1329180 | sergeyb | 2012-04-23 12:08:06 +0100 (Mon, 23 Apr 2012) | 1 line
[CXF-4259] Updating SetCookie handler to ignore the Expires property
........
................
................
Modified:
cxf/branches/2.3.x-fixes/ (props changed)
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java
Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Merged /cxf/branches/2.5.x-fixes:r1329183
Merged /cxf/branches/2.4.x-fixes:r1329185
Merged /cxf/trunk:r1329178-1329180
Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProvider.java Mon Apr 23 12:15:02 2012
@@ -30,6 +30,7 @@ public class NewCookieHeaderProvider imp
private static final String MAX_AGE = "Max-Age";
private static final String COMMENT = "Comment";
private static final String SECURE = "Secure";
+ private static final String EXPIRES = "Expires";
public NewCookie fromString(String c) {
@@ -60,6 +61,9 @@ public class NewCookieHeaderProvider imp
comment = theToken.substring(COMMENT.length() + 1);
} else if (theToken.startsWith(SECURE)) {
isSecure = true;
+ } else if (theToken.startsWith(EXPIRES)) {
+ // ignore
+ continue;
} else {
int i = theToken.indexOf('=');
if (i != -1) {
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RequestImpl.java Mon Apr 23 12:15:02 2012
@@ -36,6 +36,7 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Variant;
+import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.jaxrs.utils.HttpUtils;
import org.apache.cxf.jaxrs.utils.JAXRSUtils;
import org.apache.cxf.message.Message;
@@ -61,22 +62,25 @@ public class RequestImpl implements Requ
if (vars == null || vars.isEmpty()) {
throw new IllegalArgumentException("List of Variants is either null or empty");
}
- MediaType inMediaType = headers.getMediaType();
- Locale inLang = headers.getLanguage();
- String inEnc = headers.getRequestHeaders().getFirst(HttpHeaders.CONTENT_ENCODING);
+ List<MediaType> acceptMediaTypes = headers.getAcceptableMediaTypes();
+ List<Locale> acceptLangs = headers.getAcceptableLanguages();
+ List<String> acceptEncs = parseAcceptEnc(
+ headers.getRequestHeaders().getFirst(HttpHeaders.ACCEPT_ENCODING));
List<Variant> matchingVars = new LinkedList<Variant>();
for (Variant var : vars) {
MediaType mt = var.getMediaType();
Locale lang = var.getLanguage();
String enc = var.getEncoding();
+
+ boolean mtMatched = mt == null || acceptMediaTypes.isEmpty()
+ || JAXRSUtils.intersectMimeTypes(acceptMediaTypes, mt).size() != 0;
- boolean mtMatched = mt == null || inMediaType == null
- || JAXRSUtils.intersectMimeTypes(Collections.singletonList(inMediaType), mt).size() != 0;
+ boolean encMatched = acceptEncs.isEmpty() || enc == null
+ || acceptEncs.contains(enc);
- boolean encMatched = inEnc == null || enc == null || inEnc.equalsIgnoreCase(enc);
-
- boolean langMatched = inLang == null || lang == null || inLang.equals(lang);
+ boolean langMatched = lang == null || acceptLangs.isEmpty()
+ || isLanguageMatched(acceptLangs, lang);
if (mtMatched && encMatched && langMatched) {
matchingVars.add(var);
@@ -88,8 +92,29 @@ public class RequestImpl implements Requ
return matchingVars.isEmpty() ? null : matchingVars.get(0);
}
+ private static boolean isLanguageMatched(List<Locale> locales, Locale l) {
+ for (Locale locale : locales) {
+ if (locale.getLanguage().equalsIgnoreCase(l.getLanguage())) {
+ return true;
+ }
+ }
+ return false;
+ }
-
+ private static List<String> parseAcceptEnc(String acceptEnc) {
+ if (StringUtils.isEmpty(acceptEnc)) {
+ return Collections.emptyList();
+ }
+ List<String> list = new LinkedList<String>();
+ String[] values = acceptEnc.split(",");
+ for (String value : values) {
+ String[] pair = value.trim().split(";");
+ // ignore encoding qualifiers if any for now
+ list.add(pair[0]);
+ }
+ return list;
+ }
+
public ResponseBuilder evaluatePreconditions(EntityTag eTag) {
ResponseBuilder rb = evaluateIfMatch(eTag);
if (rb == null) {
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/NewCookieHeaderProviderTest.java Mon Apr 23 12:15:02 2012
@@ -38,6 +38,13 @@ public class NewCookieHeaderProviderTest
&& "foo".equals(c.getName()));
}
+ @Test
+ public void testFromSimpleStringWithExpires() {
+ NewCookie c = NewCookie.valueOf("foo=bar;Expires=Wed, 09 Jun 2021 10:18:14 GMT");
+ assertTrue("bar".equals(c.getValue())
+ && "foo".equals(c.getName()));
+ }
+
@Test
public void testFromComplexString() {
Modified: cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java?rev=1329200&r1=1329199&r2=1329200&view=diff
==============================================================================
--- cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java (original)
+++ cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/RequestImplTest.java Mon Apr 23 12:15:02 2012
@@ -86,9 +86,9 @@ public class RequestImplTest extends Ass
@Test
public void testSingleNonMatchingVariant() {
- metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
- metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
- metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+ metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+ metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en");
+ metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "utf-8");
List<Variant> list = new ArrayList<Variant>();
list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
@@ -98,9 +98,9 @@ public class RequestImplTest extends Ass
@Test
public void testMultipleNonMatchingVariants() {
- metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
- metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
- metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+ metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+ metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en");
+ metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "utf-8");
List<Variant> list = new ArrayList<Variant>();
list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
@@ -112,15 +112,15 @@ public class RequestImplTest extends Ass
@Test
public void testMultipleVariantsSingleMatch() {
- metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
- metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
- metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+ metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+ metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en");
+ metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "gzip");
List<Variant> list = new ArrayList<Variant>();
list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
list.add(new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("es"), "utf-8"));
- Variant var3 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "utf-8");
+ Variant var3 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "gzip");
list.add(var3);
assertSame(var3, new RequestImpl(m).selectVariant(list));
@@ -128,13 +128,13 @@ public class RequestImplTest extends Ass
@Test
public void testMultipleVariantsBestMatch() {
- metadata.putSingle(HttpHeaders.CONTENT_TYPE, "application/xml");
- metadata.putSingle(HttpHeaders.CONTENT_LANGUAGE, "en");
- metadata.putSingle(HttpHeaders.CONTENT_ENCODING, "utf-8");
+ metadata.putSingle(HttpHeaders.ACCEPT, "application/xml");
+ metadata.putSingle(HttpHeaders.ACCEPT_LANGUAGE, "en-us");
+ metadata.putSingle(HttpHeaders.ACCEPT_ENCODING, "gzip;q=1.0, compress");
List<Variant> list = new ArrayList<Variant>();
- list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "utf-8"));
- Variant var2 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "utf-8");
+ list.add(new Variant(MediaType.APPLICATION_JSON_TYPE, new Locale("en"), "gzip"));
+ Variant var2 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), "gzip");
list.add(var2);
Variant var3 = new Variant(MediaType.APPLICATION_XML_TYPE, new Locale("en"), null);
list.add(var3);
@@ -142,7 +142,6 @@ public class RequestImplTest extends Ass
list.clear();
list.add(var3);
assertSame(var3, new RequestImpl(m).selectVariant(list));
-
}
private void assertSameVariant(MediaType mt, Locale lang, String enc) {