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 2013/05/10 22:01:29 UTC
svn commit: r1481168 - in /cxf/trunk/rt/frontend/jaxrs/src:
main/java/org/apache/cxf/jaxrs/impl/ test/java/org/apache/cxf/jaxrs/impl/
Author: sergeyb
Date: Fri May 10 20:01:25 2013
New Revision: 1481168
URL: http://svn.apache.org/r1481168
Log:
[CXF-5007] More updates to ResponseImpl, ResponseBuilderImpl, LinkBuilderImpl, UriBuilderImpl, etc
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProvider.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/LinkBuilderImpl.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProviderTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/LinkBuilderImplTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProvider.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProvider.java Fri May 10 20:01:25 2013
@@ -115,6 +115,9 @@ public class CacheControlHeaderProvider
}
private String[] getTokens(String c) {
+ if (c == null) {
+ throw new IllegalArgumentException();
+ }
if (c.contains("\"")) {
List<String> values = new ArrayList<String>(4);
Matcher m = COMPLEX_HEADER_PATTERN.matcher(c);
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/LinkBuilderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/LinkBuilderImpl.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/LinkBuilderImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/LinkBuilderImpl.java Fri May 10 20:01:25 2013
@@ -93,7 +93,9 @@ public class LinkBuilderImpl implements
@Override
public Builder rel(String rel) {
- return param(Link.REL, rel);
+ String exisingRel = params.get(Link.REL);
+ String newRel = exisingRel == null ? rel : exisingRel + " " + rel;
+ return param(Link.REL, newRel);
}
@Override
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/MetadataMap.java Fri May 10 20:01:25 2013
@@ -121,7 +121,7 @@ public class MetadataMap<K, V> implement
public V getFirst(K key) {
List<V> data = this.get(key);
- return data == null ? null : data.get(0);
+ return data == null || data.isEmpty() ? null : data.get(0);
}
public void putSingle(K key, V value) {
@@ -150,7 +150,7 @@ public class MetadataMap<K, V> implement
}
public List<V> get(Object key) {
- if (!caseInsensitive) {
+ if (!caseInsensitive || key == null) {
return m.get(key);
}
K realKey = getMatchingKey(key);
@@ -159,7 +159,8 @@ public class MetadataMap<K, V> implement
private K getMatchingKey(Object key) {
for (K entry : m.keySet()) {
- if (entry.toString().equalsIgnoreCase(key.toString())) {
+ if (entry != null && entry.toString().equalsIgnoreCase(key.toString())
+ || entry == null && key == null) {
return entry;
}
}
@@ -181,7 +182,7 @@ public class MetadataMap<K, V> implement
}
public List<V> put(K key, List<V> value) {
- K realKey = !caseInsensitive ? key : getMatchingKey(key);
+ K realKey = !caseInsensitive || key == null ? key : getMatchingKey(key);
return m.put(realKey == null ? key : realKey, value);
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImpl.java Fri May 10 20:01:25 2013
@@ -187,17 +187,17 @@ public final class ResponseBuilderImpl e
MediaType mt = v.getMediaType();
if (mt != null) {
acceptVary = HttpHeaders.ACCEPT;
- addHeader(HttpHeaders.ACCEPT, mt);
+ addHeader(HttpHeaders.CONTENT_TYPE, mt);
}
Locale l = v.getLanguage();
if (l != null) {
acceptLangVary = HttpHeaders.ACCEPT_LANGUAGE;
- addHeader(HttpHeaders.ACCEPT_LANGUAGE, l);
+ addHeader(HttpHeaders.CONTENT_LANGUAGE, l);
}
String enc = v.getEncoding();
if (enc != null) {
acceptEncVary = HttpHeaders.ACCEPT_ENCODING;
- addHeader(HttpHeaders.ACCEPT_ENCODING, enc);
+ addHeader(HttpHeaders.CONTENT_ENCODING, enc);
}
}
handleVaryValue(acceptVary, acceptLangVary, acceptEncVary);
@@ -272,7 +272,11 @@ public final class ResponseBuilderImpl e
@Override
public ResponseBuilder allow(Set<String> methods) {
- return allow(methods.toArray(new String[methods.size()]));
+ if (methods == null) {
+ return allow();
+ } else {
+ return allow(methods.toArray(new String[methods.size()]));
+ }
}
@Override
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ResponseImpl.java Fri May 10 20:01:25 2013
@@ -125,11 +125,12 @@ public final class ResponseImpl extends
}
public Object getEntity() {
+ checkEntityIsClosed();
return entity;
}
public boolean hasEntity() {
- return entity != null;
+ return getEntity() != null;
}
public MultivaluedMap<String, Object> getMetadata() {
@@ -250,7 +251,8 @@ public final class ResponseImpl extends
}
public Link.Builder getLinkBuilder(String relation) {
- return Link.fromLink(getLink(relation));
+ Link link = getLink(relation);
+ return link == null ? null : Link.fromLink(link);
}
public Set<Link> getLinks() {
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java Fri May 10 20:01:25 2013
@@ -469,22 +469,14 @@ public class UriBuilderImpl extends UriB
if (method == null) {
throw new IllegalArgumentException("method is null");
}
- Path foundAnn = null;
for (Method meth : resource.getMethods()) {
if (meth.getName().equals(method)) {
Path ann = meth.getAnnotation(Path.class);
- if (foundAnn != null && ann != null) {
- throw new IllegalArgumentException("Multiple Path annotations for '" + method
- + "' overloaded method");
- }
- foundAnn = ann;
+ String path = ann == null ? "" : ann.value();
+ return path(resource).path(path);
}
}
- if (foundAnn == null) {
- throw new IllegalArgumentException("No Path annotation for '" + method + "' method");
- }
- // path(String) decomposes multi-segment path when necessary
- return path(foundAnn.value());
+ throw new IllegalArgumentException("No Path annotation for '" + method + "' method");
}
@Override
@@ -516,6 +508,9 @@ public class UriBuilderImpl extends UriB
this.originalPathEmpty = StringUtils.isEmpty(uri.getPath());
uri(uri);
} catch (IllegalArgumentException ex) {
+ if (!new URITemplate(path).getVariables().isEmpty()) {
+ return uriAsTemplate(path);
+ }
String pathEncoded = HttpUtils.pathEncode(path);
// Bad hack to bypass the TCK usage of bogus URI with empty paths containing matrix parameters,
// which even URI class chokes upon; cheaper to do the following than try to challenge,
@@ -874,10 +869,40 @@ public class UriBuilderImpl extends UriB
try {
return uri(URI.create(uriTemplate));
} catch (Exception ex) {
- throw new IllegalArgumentException(ex);
+ if (new URITemplate(uriTemplate).getVariables().isEmpty()) {
+ throw new IllegalArgumentException(ex);
+ } else {
+ return uriAsTemplate(uriTemplate);
+ }
+
}
}
+ private UriBuilder uriAsTemplate(String uri) {
+ // This can be a start of replacing URI class Parser completely
+ // but it can be too complicated, the following code is needed for now
+ // to deal with URIs containing template variables.
+ int index = uri.indexOf(":");
+ if (index != -1) {
+ this.scheme = uri.substring(0, index);
+ uri = uri.substring(index + 1);
+ if (uri.indexOf("//") == 0) {
+ uri = uri.substring(2);
+ index = uri.indexOf("/");
+ if (index != -1) {
+ String[] schemePair = uri.substring(0, index).split(":");
+ this.host = schemePair[0];
+ this.port = schemePair.length == 2 ? Integer.valueOf(schemePair[1]) : -1;
+
+ }
+ uri = uri.substring(index);
+ }
+
+ }
+ setPathAndMatrix(uri);
+ return this;
+ }
+
//the clarified rules for encoding values of uri templates are:
// - encode each value contextually based on the URI component containing the template
// - in path templates, by default, encode also slashes (i.e. treat all path templates as
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProviderTest.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProviderTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/CacheControlHeaderProviderTest.java Fri May 10 20:01:25 2013
@@ -26,11 +26,17 @@ import javax.ws.rs.core.CacheControl;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageImpl;
+
import org.junit.Assert;
import org.junit.Test;
public class CacheControlHeaderProviderTest extends Assert {
+ @Test(expected = IllegalArgumentException.class)
+ public void testValueOfNull() {
+ CacheControl.valueOf(null);
+ }
+
@Test
public void testFromSimpleString() {
CacheControl c = CacheControl.valueOf(
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/LinkBuilderImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/LinkBuilderImplTest.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/LinkBuilderImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/LinkBuilderImplTest.java Fri May 10 20:01:25 2013
@@ -18,26 +18,55 @@
*/
package org.apache.cxf.jaxrs.impl;
+import java.io.ByteArrayInputStream;
import java.net.URI;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
import javax.ws.rs.core.Link;
+import javax.ws.rs.core.MediaType;
+import org.junit.Assert;
import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-
-public class LinkBuilderImplTest {
+public class LinkBuilderImplTest extends Assert {
@Test
- public void build() throws Exception {
+ public void testBuild() throws Exception {
Link.Builder linkBuilder = new LinkBuilderImpl();
Link prevLink = linkBuilder.uri("http://example.com/page1").rel("previous").build();
assertEquals("<http://example.com/page1>;rel=\"previous\"", prevLink.toString());
}
+
+ @Test
+ public void testbBuildObjects() throws Exception {
+ StringBuilder path1 = new StringBuilder().append("p1");
+ ByteArrayInputStream path2 = new ByteArrayInputStream("p2".getBytes()) {
+ @Override
+ public String toString() {
+ return "p2";
+ }
+ };
+ URI path3 = new URI("p3");
+
+ String expected = "<" + "http://host.com:888/" + "p1/p2/p3" + ">";
+ Link.Builder builder = Link.fromUri("http://host.com:888/" + "{x1}/{x2}/{x3}");
+ Link link = builder.build(path1, path2, path3);
+ assertNotNull(link);
+ assertEquals(link.toString(), expected);
+ }
+
+ @Test
+ public void testBuildManyRels() throws Exception {
+ Link.Builder linkBuilder = new LinkBuilderImpl();
+ Link prevLink = linkBuilder.uri("http://example.com/page1").rel("1").rel("2").build();
+ assertEquals("<http://example.com/page1>;rel=\"1 2\"", prevLink.toString());
+ }
@Test
- public void relativeBuild() throws Exception {
+ public void testRelativeBuild() throws Exception {
Link.Builder linkBuilder = new LinkBuilderImpl();
URI base = URI.create("http://example.com/page2");
Link prevLink = linkBuilder.uri("http://example.com/page1").rel("previous").buildRelativized(base);
@@ -45,32 +74,27 @@ public class LinkBuilderImplTest {
}
@Test
- public void severalAttributes() throws Exception {
+ public void testSeveralAttributes() throws Exception {
Link.Builder linkBuilder = new LinkBuilderImpl();
Link prevLink = linkBuilder.uri("http://example.com/page1").rel("previous").title("A title").build();
assertEquals("<http://example.com/page1>;rel=\"previous\";title=\"A title\"", prevLink.toString());
}
-
+
@Test
- public void copyOnBuild() throws Exception {
- Link.Builder linkBuilder = new LinkBuilderImpl();
- Link prevLink = linkBuilder.uri("http://example.com/page1").rel("previous").build();
- Link nextLink = linkBuilder.uri("http://example.com/page3").rel("next").build();
-
- // Previously built link should not be affected by reuse of link builder
- assertEquals("<http://example.com/page1>;rel=\"previous\"", prevLink.toString());
- assertEquals("<http://example.com/page3>;rel=\"next\"", nextLink.toString());
+ public void testCreateFromMethod() throws Exception {
+ Link.Builder linkBuilder = Link.fromMethod(TestResource.class, "consumesAppJson");
+ Link link = linkBuilder.build();
+ String resource = link.toString();
+ assertTrue(resource.contains("<resource/consumesappjson>"));
}
-
- @Test
- public void copyOnRelativeBuild() throws Exception {
- Link.Builder linkBuilder = new LinkBuilderImpl();
- URI base = URI.create("http://example.com/page2");
- Link prevLink = linkBuilder.uri("http://example.com/page1").rel("previous").buildRelativized(base);
- Link nextLink = linkBuilder.uri("http://example.com/page3").rel("next").buildRelativized(base);
-
- // Previously built link should not be affected by reuse of link builder
- assertEquals("<page1>;rel=\"previous\"", prevLink.toString());
- assertEquals("<page3>;rel=\"next\"", nextLink.toString());
+
+ @Path("resource")
+ public static class TestResource {
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Path("consumesappjson")
+ public String consumesAppJson() {
+ return MediaType.APPLICATION_JSON;
+ }
}
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/MetadataMapTest.java Fri May 10 20:01:25 2013
@@ -52,6 +52,39 @@ public class MetadataMapTest extends Ass
}
@Test
+ public void testPutSingleNullKey() {
+ MetadataMap<String, Object> m = new MetadataMap<String, Object>();
+ m.putSingle(null, "null");
+ m.putSingle(null, "null2");
+ assertEquals(1, m.get(null).size());
+ assertEquals("null2", m.getFirst(null));
+ }
+
+ @Test
+ public void testPutSingleNullKeyCaseSensitive() {
+ MetadataMap<String, Object> m = new MetadataMap<String, Object>(false, true);
+ m.putSingle(null, "null");
+ m.putSingle(null, "null2");
+ assertEquals(1, m.get(null).size());
+ assertEquals("null2", m.getFirst(null));
+ }
+
+ @Test
+ public void testPutSingleNullKeyCaseSensitive2() {
+ MetadataMap<String, Object> map = new MetadataMap<String, Object>(false, true);
+ Object obj1 = new Object();
+ Object obj2 = new Object();
+ map.putSingle("key", obj1);
+ map.putSingle("key", obj2);
+ map.putSingle(null, obj2);
+ map.putSingle(null, obj1);
+ assertEquals(2, map.size());
+ assertEquals(1, map.get(null).size());
+ assertSame(map.getFirst("key"), obj2);
+ assertSame(map.getFirst(null), obj1);
+ }
+
+ @Test
public void testAddFirst() {
MetadataMap<String, Object> m = new MetadataMap<String, Object>();
m.addFirst("baz", "foo");
@@ -299,6 +332,15 @@ public class MetadataMapTest extends Ass
}
@Test
+ public void testGetFirstEmptyMap() {
+ MetadataMap<String, Object> m = new MetadataMap<String, Object>();
+ assertNull(m.getFirst("key"));
+ m.add("key", "1");
+ m.get("key").clear();
+ assertNull(m.getFirst("key"));
+ }
+
+ @Test
public void testCompareIgnoreValueOrder() {
MetadataMap<String, String> m = new MetadataMap<String, String>();
m.add("baz", "bar1");
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseBuilderImplTest.java Fri May 10 20:01:25 2013
@@ -22,6 +22,7 @@ package org.apache.cxf.jaxrs.impl;
import java.lang.annotation.Annotation;
import java.net.URI;
import java.text.SimpleDateFormat;
+import java.util.Arrays;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
@@ -35,9 +36,11 @@ import javax.ws.rs.core.Link;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.NewCookie;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Variant;
import org.apache.cxf.jaxrs.utils.HttpUtils;
+
import org.junit.Assert;
import org.junit.Test;
@@ -129,6 +132,12 @@ public class ResponseBuilderImplTest ext
methods.add("GET");
checkBuild(Response.ok().allow(methods).build(), 200, null, m);
}
+
+ @Test
+ public void testAllowReSet() throws Exception {
+ Response r = Response.ok().allow("GET").allow((Set<String>)null).build();
+ assertNull(r.getMetadata().getFirst("Allow"));
+ }
@Test
public void testValidStatus() {
@@ -327,6 +336,28 @@ public class ResponseBuilderImplTest ext
200, null, m);
}
+ @Test
+ public void testVariant2() throws Exception {
+ List<String> encoding = Arrays.asList("gzip", "compress");
+ MediaType mt = MediaType.APPLICATION_JSON_TYPE;
+ ResponseBuilder rb = Response.ok();
+ rb = rb.variants(getVariantList(encoding, mt).toArray(new Variant[0]));
+ Response response = rb.build();
+ List<Object> enc = response.getHeaders().get(HttpHeaders.CONTENT_ENCODING);
+ assertTrue(encoding.containsAll(enc));
+ List<Object> ct = response.getHeaders().get(HttpHeaders.CONTENT_TYPE);
+ assertTrue(ct.contains(mt.toString()));
+ }
+
+ protected static List<Variant> getVariantList(List<String> encoding,
+ MediaType... mt) {
+ return Variant.VariantListBuilder.newInstance()
+ .mediaTypes(mt)
+ .languages(new Locale("en", "US"), new Locale("en", "GB"), new Locale("zh", "CN"))
+ .encodings(encoding.toArray(new String[]{}))
+ .add()
+ .build();
+ }
@Test
public void testCreatedNoEntity() throws Exception {
@@ -353,12 +384,14 @@ public class ResponseBuilderImplTest ext
public void testVariantsArray() throws Exception {
MetadataMap<String, Object> m = new MetadataMap<String, Object>();
- m.add("Accept", "application/json");
- m.add("Accept", "application/xml");
+ m.add("Content-Type", "application/json");
+ m.add("Content-Language", "en_uk");
+ m.add("Content-Language", "en_gb");
m.add("Vary", "Accept");
-
- Variant json = new Variant(MediaType.APPLICATION_JSON_TYPE, (String)null, null);
- Variant xml = new Variant(MediaType.APPLICATION_XML_TYPE, (String)null, null);
+ m.add("Vary", "Accept-Language");
+
+ Variant json = new Variant(MediaType.APPLICATION_JSON_TYPE, "en_uk", null);
+ Variant xml = new Variant(MediaType.APPLICATION_JSON_TYPE, "en_gb", null);
checkBuild(Response.ok().variants(json, xml).build(), 200, null, m);
}
@@ -366,17 +399,17 @@ public class ResponseBuilderImplTest ext
@Test
public void testVariantsList() throws Exception {
MetadataMap<String, Object> m = new MetadataMap<String, Object>();
- m.add("Accept", "text/xml");
- m.add("Accept", "application/xml");
- m.add("Accept-Language", "en_UK");
- m.add("Accept-Language", "en_GB");
- m.add("Accept-Encoding", "compress");
- m.add("Accept-Encoding", "gzip");
+ m.add("Content-Type", "text/xml");
+ m.add("Content-Language", "en_UK");
+ m.add("Content-Language", "en_GB");
+ m.add("Content-Encoding", "compress");
+ m.add("Content-Encoding", "gzip");
m.add("Vary", "Accept");
m.add("Vary", "Accept-Language");
m.add("Vary", "Accept-Encoding");
+
List<Variant> vts = Variant.VariantListBuilder.newInstance()
- .mediaTypes(MediaType.TEXT_XML_TYPE, MediaType.APPLICATION_XML_TYPE).
+ .mediaTypes(MediaType.TEXT_XML_TYPE).
languages(new Locale("en", "UK"), new Locale("en", "GB")).encodings("compress", "gzip").
add().build();
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ResponseImplTest.java Fri May 10 20:01:25 2013
@@ -20,20 +20,32 @@
package org.apache.cxf.jaxrs.impl;
import java.io.ByteArrayInputStream;
+import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
+import javax.ws.rs.core.Application;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Link;
+import javax.ws.rs.core.Link.Builder;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.NewCookie;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.Response.StatusType;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.Variant;
+import javax.ws.rs.core.Variant.VariantListBuilder;
+import javax.ws.rs.ext.RuntimeDelegate;
+import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
import org.apache.cxf.jaxrs.utils.HttpUtils;
import org.junit.Assert;
+import org.junit.Ignore;
import org.junit.Test;
@@ -54,11 +66,34 @@ public class ResponseImplTest extends As
}
@Test
+ @Ignore
+ public void testGetHeaderStringUsingHeaderDelegate() throws Exception {
+ StringBean bean = new StringBean("s3");
+ RuntimeDelegate original = RuntimeDelegate.getInstance();
+ RuntimeDelegate.setInstance(new StringBeanRuntimeDelegate(original));
+ try {
+ Response response = Response.ok().header(bean.get(), bean).build();
+ String header = response.getHeaderString(bean.get());
+ assertTrue(header.contains(bean.get()));
+ } finally {
+ RuntimeDelegate.setInstance(original);
+ StringBeanRuntimeDelegate.assertNotStringBeanRuntimeDelegate();
+ }
+ }
+
+ @Test
public void testHasEntity() {
assertTrue(new ResponseImpl(200, "").hasEntity());
assertFalse(new ResponseImpl(200).hasEntity());
}
+ @Test(expected = IllegalStateException.class)
+ public void testGetEntityAfterClose() {
+ Response response = Response.ok("entity").build();
+ response.close();
+ response.getEntity();
+ }
+
@Test
public void testStatuInfoForOKStatus() {
StatusType si = new ResponseImpl(200, "").getStatusInfo();
@@ -86,12 +121,12 @@ public class ResponseImplTest extends As
assertEquals("", si.getReasonPhrase());
}
- @Test
+ @Test(expected = IllegalStateException.class)
public void testHasEntityAfterClose() {
Response r = new ResponseImpl(200, new ByteArrayInputStream("data".getBytes()));
assertTrue(r.hasEntity());
r.close();
- assertFalse(r.hasEntity());
+ r.hasEntity();
}
@@ -204,6 +239,23 @@ public class ResponseImplTest extends As
}
@Test
+ public void testGetNoLinkBuilder() throws Exception {
+ Response response = Response.ok().build();
+ Builder builder = response.getLinkBuilder("anyrelation");
+ assertNull(builder);
+ }
+
+ protected static List<Variant> getVariantList(List<String> encoding,
+ MediaType... mt) {
+ return Variant.VariantListBuilder.newInstance()
+ .mediaTypes(mt)
+ .languages(new Locale("en", "US"), new Locale("en", "GB"), new Locale("zh", "CN"))
+ .encodings(encoding.toArray(new String[]{}))
+ .add()
+ .build();
+ }
+
+ @Test
public void testGetLinks() {
ResponseImpl ri = new ResponseImpl(200);
MetadataMap<String, Object> meta = new MetadataMap<String, Object>();
@@ -232,4 +284,106 @@ public class ResponseImplTest extends As
assertEquals("http://prev", prev.getUri().toString());
assertEquals("prev", prev.getRel());
}
+
+ public static class StringBean {
+ private String header;
+
+ public StringBean(String header) {
+ super();
+ this.header = header;
+ }
+
+ public String get() {
+ return header;
+ }
+
+ public void set(String h) {
+ this.header = h;
+ }
+
+ @Override
+ public String toString() {
+ return "StringBean. To get a value, use rather #get() method.";
+ }
+ }
+
+ public static class StringBeanRuntimeDelegate extends RuntimeDelegate {
+ private RuntimeDelegate original;
+ public StringBeanRuntimeDelegate(RuntimeDelegate orig) {
+ super();
+ this.original = orig;
+ assertNotStringBeanRuntimeDelegate(orig);
+ }
+
+ @Override
+ public <T> T createEndpoint(Application arg0, Class<T> arg1)
+ throws IllegalArgumentException, UnsupportedOperationException {
+ return original.createEndpoint(arg0, arg1);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> HeaderDelegate<T> createHeaderDelegate(Class<T> arg0)
+ throws IllegalArgumentException {
+ if (arg0 == StringBean.class) {
+ return (HeaderDelegate<T>) new StringBeanHeaderDelegate();
+ } else {
+ return original.createHeaderDelegate(arg0);
+ }
+ }
+
+ @Override
+ public ResponseBuilder createResponseBuilder() {
+ return original.createResponseBuilder();
+ }
+
+ @Override
+ public UriBuilder createUriBuilder() {
+ return original.createUriBuilder();
+ }
+
+ @Override
+ public VariantListBuilder createVariantListBuilder() {
+ return original.createVariantListBuilder();
+ }
+
+ public RuntimeDelegate getOriginal() {
+ return original;
+ }
+
+ public static final void assertNotStringBeanRuntimeDelegate() {
+ RuntimeDelegate delegate = RuntimeDelegate.getInstance();
+ assertNotStringBeanRuntimeDelegate(delegate);
+ }
+
+ public static final void assertNotStringBeanRuntimeDelegate(RuntimeDelegate delegate) {
+ if (delegate instanceof StringBeanRuntimeDelegate) {
+ StringBeanRuntimeDelegate sbrd = (StringBeanRuntimeDelegate) delegate;
+ if (sbrd.getOriginal() != null) {
+ RuntimeDelegate.setInstance(sbrd.getOriginal());
+ throw new RuntimeException(
+ "RuntimeDelegate.getInstance() is StringBeanRuntimeDelegate");
+ }
+ }
+ }
+
+ @Override
+ public Builder createLinkBuilder() {
+ return original.createLinkBuilder();
+ }
+ }
+
+ public static class StringBeanHeaderDelegate implements HeaderDelegate<StringBean> {
+
+ @Override
+ public StringBean fromString(String string) throws IllegalArgumentException {
+ return new StringBean(string);
+ }
+
+ @Override
+ public String toString(StringBean bean) throws IllegalArgumentException {
+ return bean.get();
+ }
+
+ }
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java?rev=1481168&r1=1481167&r2=1481168&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/UriBuilderImplTest.java Fri May 10 20:01:25 2013
@@ -40,6 +40,20 @@ import org.junit.Test;
public class UriBuilderImplTest extends Assert {
@Test
+ public void testUriTemplate() throws Exception {
+ UriBuilder builder = UriBuilder.fromUri("http://localhost:8080/{a}/{b}");
+ URI uri = builder.build("1", "2");
+ assertEquals("http://localhost:8080/1/2", uri.toString());
+ }
+
+ @Test
+ public void testUriTemplate2() throws Exception {
+ UriBuilder builder = UriBuilder.fromUri("http://localhost/{a}/{b}");
+ URI uri = builder.build("1", "2");
+ assertEquals("http://localhost/1/2", uri.toString());
+ }
+
+ @Test
public void testBuildWithNonEncodedSubstitutionValue() {
URI uri;
uri = UriBuilder.fromPath("/{a}").build("{}");
@@ -765,7 +779,7 @@ public class UriBuilderImplTest extends
public void testAddPathClassMethod() throws Exception {
URI uri = new URI("http://foo/");
URI newUri = new UriBuilderImpl().uri(uri).path(BookStore.class, "updateBook").path("bar").build();
- assertEquals("URI is not built correctly", new URI("http://foo/books/bar"), newUri);
+ assertEquals("URI is not built correctly", new URI("http://foo/bookstore/books/bar"), newUri);
}
@Test(expected = IllegalArgumentException.class)