Repository: incubator-juneau Updated Branches: refs/heads/master 98a53eb31 -> b983a7f62
Testcases. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/b983a7f6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/b983a7f6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/b983a7f6 Branch: refs/heads/master Commit: b983a7f620ff957a4980cfa507d82e513ce28e6b Parents: 98a53eb Author: JamesBognar <[email protected]> Authored: Fri May 12 10:26:09 2017 -0400 Committer: JamesBognar <[email protected]> Committed: Fri May 12 10:26:09 2017 -0400 ---------------------------------------------------------------------- juneau-core/src/main/javadoc/overview.html | 2 + .../org/apache/juneau/rest/client/RestCall.java | 15 +- .../juneau/rest/test/HeadersResource.java | 129 +++++++++++++- .../apache/juneau/rest/test/ParamsResource.java | 125 ++++++++++++- .../juneau/rest/test/ParamsResource.properties | 15 ++ .../rest/test/ParamsResource_ja_JP.properties | 15 ++ .../apache/juneau/rest/test/HeadersTest.java | 175 ++++++++++++++++++- .../org/apache/juneau/rest/test/ParamsTest.java | 140 +++++++++++++++ .../org/apache/juneau/rest/test/_TestSuite.java | 1 + .../org/apache/juneau/rest/RestCallHandler.java | 3 + .../apache/juneau/rest/RestParamDefaults.java | 12 +- .../org/apache/juneau/rest/RestResponse.java | 19 +- 12 files changed, 625 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-core/src/main/javadoc/overview.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/javadoc/overview.html b/juneau-core/src/main/javadoc/overview.html index f0bd247..f47b431 100644 --- a/juneau-core/src/main/javadoc/overview.html +++ b/juneau-core/src/main/javadoc/overview.html @@ -6083,6 +6083,8 @@ </p> <li>A new annotation {@link org.apache.juneau.rest.annotation.RestResource#paramResolvers() @RestResource.paramResolvers()} that allows you to define your own custom Java method parameter resolvers. + <li>Fixed bug where Writer returned by {@link org.apache.juneau.rest.RestResponse#getWriter()} was not being flushed automatically + at the end of the HTTP call. </ul> <h6 class='topic'>org.apache.juneau.rest.client</h6> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java ---------------------------------------------------------------------- diff --git a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java index 7bc9449..5cdcd84 100644 --- a/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java +++ b/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestCall.java @@ -739,7 +739,7 @@ public final class RestCall { * @return This object (for method chaining). */ public RestCall maxForwards(Object value) { - return header("If-Unmodified-Since", value); + return header("Max-Forwards", value); } /** @@ -751,7 +751,7 @@ public final class RestCall { * @return This object (for method chaining). */ public RestCall origin(Object value) { - return header("If-Unmodified-Since", value); + return header("Origin", value); } /** @@ -1821,4 +1821,15 @@ public final class RestCall { interceptor(new RestCallLogger(level, log)); return this; } + + /** + * Sets <code>Debug: value</code> header on this request. + * + * @param value The debug value. + * @return This object (for method chaining). + */ + public RestCall debug(boolean value) { + header("Debug", value); + return this; + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/HeadersResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/HeadersResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/HeadersResource.java index e5a6265..0a03469 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/HeadersResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/HeadersResource.java @@ -27,9 +27,10 @@ import org.apache.juneau.rest.annotation.*; path="/testHeaders", serializers=HeadersResource.PlainTextAnythingSerializer.class, parsers=HeadersResource.PlainTextAnythingParser.class, - encoders=HeadersResource.IdentityAnythingEncoder.class + encoders=HeadersResource.IdentityAnythingEncoder.class, + paramResolvers=HeadersResource.CustomHeaderParam.class ) -public class HeadersResource extends RestServletDefault { +public class HeadersResource extends RestServlet { private static final long serialVersionUID = 1L; //==================================================================================================== @@ -39,17 +40,135 @@ public class HeadersResource extends RestServletDefault { public String accept(Accept accept) { return accept.toString(); } - + @RestMethod(name="GET", path="/acceptCharset") + public String acceptCharset(AcceptCharset acceptCharset) { + return acceptCharset.toString(); + } @RestMethod(name="GET", path="/acceptEncoding") public String acceptEncoding(AcceptEncoding acceptEncoding) { - System.err.println(acceptEncoding); return acceptEncoding.toString(); } - + @RestMethod(name="GET", path="/acceptLanguage") + public String acceptLanguage(AcceptLanguage acceptLanguage) { + return acceptLanguage.toString(); + } + @RestMethod(name="GET", path="/authorization") + public String authorization(Authorization authorization) { + return authorization.toString(); + } + @RestMethod(name="GET", path="/cacheControl") + public String cacheControl(CacheControl cacheControl) { + return cacheControl.toString(); + } + @RestMethod(name="GET", path="/connection") + public String connection(Connection connection) { + return connection.toString(); + } + @RestMethod(name="GET", path="/contentLength") + public String contentLength(ContentLength contentLength) { + return contentLength.toString(); + } @RestMethod(name="GET", path="/contentType") public String contentType(ContentType contentType) { return contentType.toString(); } + @RestMethod(name="GET", path="/date") + public String date(org.apache.juneau.http.Date date) { + return date.toString(); + } + @RestMethod(name="GET", path="/expect") + public String expect(Expect expect) { + return expect.toString(); + } + @RestMethod(name="GET", path="/from") + public String from(From from) { + return from.toString(); + } + @RestMethod(name="GET", path="/host") + public String host(Host host) { + return host.toString(); + } + @RestMethod(name="GET", path="/ifMatch") + public String IfMatch(IfMatch ifMatch) { + return ifMatch.toString(); + } + @RestMethod(name="GET", path="/ifModifiedSince") + public String ifModifiedSince(IfModifiedSince ifModifiedSince) { + return ifModifiedSince.toString(); + } + @RestMethod(name="GET", path="/ifNoneMatch") + public String ifNoneMatch(IfNoneMatch ifNoneMatch) { + return ifNoneMatch.toString(); + } + @RestMethod(name="GET", path="/ifRange") + public String ifRange(IfRange ifRange) { + return ifRange.toString(); + } + @RestMethod(name="GET", path="/ifUnmodifiedSince") + public String ifUnmodifiedSince(IfUnmodifiedSince ifUnmodifiedSince) { + return ifUnmodifiedSince.toString(); + } + @RestMethod(name="GET", path="/maxForwards") + public String maxForwards(MaxForwards maxForwards) { + return maxForwards.toString(); + } + @RestMethod(name="GET", path="/pragma") + public String pragma(Pragma pragma) { + return pragma.toString(); + } + @RestMethod(name="GET", path="/proxyAuthorization") + public String proxyAuthorization(ProxyAuthorization proxyAuthorization) { + return proxyAuthorization.toString(); + } + @RestMethod(name="GET", path="/range") + public String range(Range range) { + return range.toString(); + } + @RestMethod(name="GET", path="/referer") + public String referer(Referer referer) { + return referer.toString(); + } + @RestMethod(name="GET", path="/te") + public String te(TE te) { + return te.toString(); + } + @RestMethod(name="GET", path="/upgrade") + public String upgrade(Upgrade upgrade) { + return upgrade.toString(); + } + @RestMethod(name="GET", path="/userAgent") + public String userAgent(UserAgent userAgent) { + return userAgent.toString(); + } + @RestMethod(name="GET", path="/warning") + public String warning(Warning warning) { + return warning.toString(); + } + @RestMethod(name="GET", path="/customHeader") + public String customHeader(CustomHeader customHeader) { + return customHeader.toString(); + } + + public static class CustomHeaderParam extends RestParam { + public CustomHeaderParam() { + super(RestParamType.HEADER, "Custom", CustomHeader.class); + } + @Override + public Object resolve(RestRequest req, RestResponse res) throws Exception { + return new CustomHeader(req.getHeader("Custom")); + } + } + + public static class CustomHeader { + public String value; + public CustomHeader(String value) { + this.value = value; + } + @Override + public String toString() { + return value; + } + } @Produces("*/*") public static class PlainTextAnythingSerializer extends PlainTextSerializer { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java index cfd7f15..706b97f 100644 --- a/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java +++ b/juneau-rest-test/src/main/java/org/apache/juneau/rest/test/ParamsResource.java @@ -14,18 +14,27 @@ package org.apache.juneau.rest.test; import static org.apache.juneau.rest.RestContext.*; +import java.io.*; import java.util.*; +import java.util.logging.*; +import javax.servlet.*; import javax.servlet.http.*; import org.apache.juneau.*; +import org.apache.juneau.dto.swagger.*; import org.apache.juneau.examples.addressbook.*; +import org.apache.juneau.http.*; +import org.apache.juneau.ini.*; +import org.apache.juneau.internal.*; import org.apache.juneau.json.*; +import org.apache.juneau.parser.*; import org.apache.juneau.plaintext.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; import org.apache.juneau.transforms.*; import org.apache.juneau.urlencoding.*; +import org.apache.juneau.utils.*; /** * JUnit automated testcase resource. @@ -36,7 +45,8 @@ import org.apache.juneau.urlencoding.*; properties={ @Property(name=REST_allowMethodParam, value="*") }, - pojoSwaps={CalendarSwap.DateMedium.class} + pojoSwaps={CalendarSwap.DateMedium.class}, + messages="ParamsResource" ) public class ParamsResource extends RestServletDefault { private static final long serialVersionUID = 1L; @@ -292,4 +302,117 @@ public class ParamsResource extends RestServletDefault { public DTO2s.C testFormPostsWithMultiParamsUsingAnnotation(@Body DTO2s.C content) throws Exception { return content; } + + //==================================================================================================== + // Test other available object types as parameters. + //==================================================================================================== + + @RestMethod(name="GET", path="/otherObjects/ResourceBundle") + public String testOtherResourceBundle(ResourceBundle t) { + if (t != null) + return t.getString("foo"); + return null; + } + + @RestMethod(name="GET", path="/otherObjects/MessageBundle") + public String testOtherMessages(MessageBundle t) { + if (t != null) + return t.getString("foo"); + return null; + } + + @RestMethod(name="POST", path="/otherObjects/InputStream") + public String testOtherInputStream(InputStream t) throws IOException { + return IOUtils.read(t); + } + + @RestMethod(name="POST", path="/otherObjects/ServletInputStream") + public String testOtherServletInputStream(ServletInputStream t) throws IOException { + return IOUtils.read(t); + } + + @RestMethod(name="POST", path="/otherObjects/Reader") + public String testOtherReader(Reader t) throws IOException { + return IOUtils.read(t); + } + + @RestMethod(name="GET", path="/otherObjects/OutputStream") + public void testOtherOutputStream(OutputStream t) throws IOException { + t.write("OK".getBytes()); + } + + @RestMethod(name="GET", path="/otherObjects/ServletOutputStream") + public void testOtherServletOutputStream(ServletOutputStream t) throws IOException { + t.write("OK".getBytes()); + } + + @RestMethod(name="GET", path="/otherObjects/Writer") + public void testOtherWriter(Writer t) throws IOException { + t.write("OK"); + } + + @RestMethod(name="GET", path="/otherObjects/RequestHeaders") + public boolean testOtherRequestHeaders(RequestHeaders t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/RequestQuery") + public boolean testOtherRequestQueryParams(RequestQuery t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/RequestFormData") + public boolean testOtherRequestFormData(RequestFormData t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/HttpMethod") + public String testOtherHttpMethod(HttpMethod t) { + return t.toString(); + } + + @RestMethod(name="GET", path="/otherObjects/Logger") + public boolean testOtherLogger(Logger t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/JuneauLogger") + public boolean testOtherJuneauLogger(JuneauLogger t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/RestContext") + public boolean testOtherRestContext(RestContext t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/Parser") + public String testOtherParser(Parser t) { + return t.getClass().getName(); + } + + @RestMethod(name="GET", path="/otherObjects/Locale") + public String testOtherLocale(Locale t) { + return t.toString(); + } + + @RestMethod(name="GET", path="/otherObjects/Swagger") + public boolean testOtherSwagger(Swagger t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/RequestPathMatch") + public boolean testOtherRequestPathMatch(RequestPathMatch t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/RequestBody") + public boolean testOtherRequestBody(RequestBody t) { + return t != null; + } + + @RestMethod(name="GET", path="/otherObjects/ConfigFile") + public boolean testOtherConfigFile(ConfigFile t) { + return t != null; + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource.properties ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource.properties b/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource.properties new file mode 100644 index 0000000..73add61 --- /dev/null +++ b/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource.properties @@ -0,0 +1,15 @@ +# *************************************************************************************************************************** +# * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * +# * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * +# * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * +# * with the License. You may obtain a copy of the License at * +# * * +# * http://www.apache.org/licenses/LICENSE-2.0 * +# * * +# * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * +# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * +# * specific language governing permissions and limitations under the License. * +# * * +# *************************************************************************************************************************** + +foo = bar \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource_ja_JP.properties ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource_ja_JP.properties b/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource_ja_JP.properties new file mode 100644 index 0000000..336741e --- /dev/null +++ b/juneau-rest-test/src/main/resources/org/apache/juneau/rest/test/ParamsResource_ja_JP.properties @@ -0,0 +1,15 @@ +# *************************************************************************************************************************** +# * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * +# * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * +# * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * +# * with the License. You may obtain a copy of the License at * +# * * +# * http://www.apache.org/licenses/LICENSE-2.0 * +# * * +# * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * +# * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * +# * specific language governing permissions and limitations under the License. * +# * * +# *************************************************************************************************************************** + +foo = baz \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java index 1a96e47..a834210 100644 --- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java +++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/HeadersTest.java @@ -19,6 +19,8 @@ import org.junit.*; public class HeadersTest extends RestTestcase { + RestClient client = TestMicroservice.DEFAULT_CLIENT; + private static String URL = "/testHeaders"; //==================================================================================================== @@ -26,9 +28,7 @@ public class HeadersTest extends RestTestcase { //==================================================================================================== @Test - public void testAccept() throws Exception { - RestClient client = TestMicroservice.DEFAULT_CLIENT; - + public void accept() throws Exception { assertEquals("text/foo", client.doGet(URL + "/accept").accept("text/foo").getResponseAsString()); assertEquals("text/foo+bar", client.doGet(URL + "/accept").accept("text/foo+bar").getResponseAsString()); assertEquals("text/*", client.doGet(URL + "/accept").accept("text/*").getResponseAsString()); @@ -37,20 +37,177 @@ public class HeadersTest extends RestTestcase { assertEquals("text/foo", client.doGet(URL + "/accept").accept("text/foo;q=1.0").getResponseAsString()); assertEquals("text/foo;q=0.9", client.doGet(URL + "/accept").accept("text/foo;q=0.9").getResponseAsString()); assertEquals("text/foo;x=X;q=0.9;y=Y", client.doGet(URL + "/accept").accept("text/foo;x=X;q=0.9;y=Y").getResponseAsString()); + + assertEquals("text/foo", client.doGet(URL + "/accept").query("Accept", "text/foo").getResponseAsString()); } @Test - public void testAcceptEncoding() throws Exception { - RestClient client = TestMicroservice.DEFAULT_CLIENT; + public void acceptCharset() throws Exception { + assertEquals("UTF-8", client.doGet(URL + "/acceptCharset").acceptCharset("UTF-8").getResponseAsString()); + assertEquals("UTF-8", client.doGet(URL + "/acceptCharset").query("Accept-Charset", "UTF-8").getResponseAsString()); + } + + @Test + public void acceptEncoding() throws Exception { + assertEquals("foo", client.doGet(URL + "/acceptEncoding").acceptEncoding("foo").getResponseAsString()); + assertEquals("*", client.doGet(URL + "/acceptEncoding").acceptEncoding("*").getResponseAsString()); + assertEquals("*", client.doGet(URL + "/acceptEncoding").query("Accept-Encoding", "*").getResponseAsString()); + } + + @Test + public void acceptLanguage() throws Exception { + assertEquals("foo", client.doGet(URL + "/acceptLanguage").acceptLanguage("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/acceptLanguage").query("Accept-Language", "foo").getResponseAsString()); + } + + @Test + public void authorization() throws Exception { + assertEquals("foo", client.doGet(URL + "/authorization").authorization("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/authorization").query("Authorization", "foo").getResponseAsString()); + } - assertEquals("foo", client.doGet(URL + "/acceptEncoding").accept("text/plain").acceptEncoding("foo").getResponseAsString()); - assertEquals("*", client.doGet(URL + "/acceptEncoding").accept("text/plain").acceptEncoding("*").getResponseAsString()); + @Test + public void cacheControl() throws Exception { + assertEquals("foo", client.doGet(URL + "/cacheControl").cacheControl("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/cacheControl").query("Cache-Control", "foo").getResponseAsString()); } @Test - public void testContentType() throws Exception { + public void connection() throws Exception { + assertEquals("foo", client.doGet(URL + "/connection").connection("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/connection").query("Connection", "foo").getResponseAsString()); + } + + @Test + public void contentLength() throws Exception { + assertEquals("0", client.doGet(URL + "/contentLength").contentLength(0).getResponseAsString()); + assertEquals("0", client.doGet(URL + "/contentLength").query("Content-Length", 0).getResponseAsString()); + } + + @Test + public void contentType() throws Exception { + assertEquals("text/foo", client.doGet(URL + "/contentType").contentType("text/foo").getResponseAsString()); + assertEquals("text/foo", client.doGet(URL + "/contentType").query("Content-Type", "text/foo").getResponseAsString()); + } + + @Test + public void date() throws Exception { + assertEquals("foo", client.doGet(URL + "/date").date("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/date").query("Date", "foo").getResponseAsString()); + } + + @Test + public void expect() throws Exception { + assertEquals("100-continue", client.doGet(URL + "/expect").expect("100-continue").getResponseAsString()); + assertEquals("100-continue", client.doGet(URL + "/expect").query("Expect", "100-continue").getResponseAsString()); + } + + @Test + public void from() throws Exception { + assertEquals("foo", client.doGet(URL + "/from").from("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/from").query("From", "foo").getResponseAsString()); + } + + @Test + public void host() throws Exception { + assertTrue(client.doGet(URL + "/host").host("localhost").getResponseAsString().startsWith("localhost")); + assertTrue(client.doGet(URL + "/host").query("Host", "localhost").getResponseAsString().startsWith("localhost")); + } + + @Test + public void ifMatch() throws Exception { RestClient client = TestMicroservice.DEFAULT_CLIENT; + assertEquals("\"foo\"", client.doGet(URL + "/ifMatch").ifMatch("foo").getResponseAsString()); + assertEquals("\"foo\"", client.doGet(URL + "/ifMatch").ifMatch("\"foo\"").getResponseAsString()); + assertEquals("W/\"foo\"", client.doGet(URL + "/ifMatch").ifMatch("W/\"foo\"").getResponseAsString()); + assertEquals("W/\"foo\", \"bar\"", client.doGet(URL + "/ifMatch").ifMatch("W/\"foo\",\"bar\"").getResponseAsString()); + assertEquals("\"foo\"", client.doGet(URL + "/ifMatch").query("If-Match", "foo").getResponseAsString()); + } + + @Test + public void ifModifiedSince() throws Exception { + assertEquals("foo", client.doGet(URL + "/ifModifiedSince").ifModifiedSince("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/ifModifiedSince").query("If-Modified-Since", "foo").getResponseAsString()); + } + + @Test + public void ifNoneMatch() throws Exception { + assertEquals("\"foo\"", client.doGet(URL + "/ifNoneMatch").ifNoneMatch("foo").getResponseAsString()); + assertEquals("\"foo\"", client.doGet(URL + "/ifNoneMatch").ifNoneMatch("\"foo\"").getResponseAsString()); + assertEquals("W/\"foo\"", client.doGet(URL + "/ifNoneMatch").ifNoneMatch("W/\"foo\"").getResponseAsString()); + assertEquals("W/\"foo\", \"bar\"", client.doGet(URL + "/ifNoneMatch").ifNoneMatch("W/\"foo\",\"bar\"").getResponseAsString()); + assertEquals("\"foo\"", client.doGet(URL + "/ifNoneMatch").query("If-None-Match", "foo").getResponseAsString()); + } + + @Test + public void ifRange() throws Exception { + assertEquals("foo", client.doGet(URL + "/ifRange").ifRange("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/ifRange").query("If-Range", "foo").getResponseAsString()); + } + + @Test + public void ifUnmodifiedSince() throws Exception { + assertEquals("foo", client.doGet(URL + "/ifUnmodifiedSince").ifUnmodifiedSince("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/ifUnmodifiedSince").query("If-Unmodified-Since", "foo").getResponseAsString()); + } + + @Test + public void maxForwards() throws Exception { + assertEquals("123", client.doGet(URL + "/maxForwards").maxForwards(123).getResponseAsString()); + assertEquals("123", client.doGet(URL + "/maxForwards").query("Max-Forwards", 123).getResponseAsString()); + } + + @Test + public void pragma() throws Exception { + assertEquals("foo", client.doGet(URL + "/pragma").pragma("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/pragma").query("Pragma", "foo").getResponseAsString()); + } + + @Test + public void proxyAuthorization() throws Exception { + assertEquals("foo", client.doGet(URL + "/proxyAuthorization").proxyAuthorization("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/proxyAuthorization").query("Proxy-Authorization", "foo").getResponseAsString()); + } - assertEquals("text/foo", client.doGet(URL + "/contentType").accept("text/plain").contentType("text/foo").getResponseAsString()); + @Test + public void range() throws Exception { + assertEquals("foo", client.doGet(URL + "/range").range("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/range").query("Range", "foo").getResponseAsString()); + } + + @Test + public void referer() throws Exception { + assertEquals("foo", client.doGet(URL + "/referer").referer("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/referer").query("Referer", "foo").getResponseAsString()); + } + + @Test + public void te() throws Exception { + assertEquals("foo", client.doGet(URL + "/te").te("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/te").query("TE", "foo").getResponseAsString()); + } + + @Test + public void upgrade() throws Exception { + assertEquals("foo", client.doGet(URL + "/upgrade").upgrade("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/upgrade").query("Upgrade", "foo").getResponseAsString()); + } + + @Test + public void userAgent() throws Exception { + assertEquals("foo", client.doGet(URL + "/userAgent").userAgent("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/userAgent").query("User-Agent", "foo").getResponseAsString()); + } + + @Test + public void warning() throws Exception { + assertEquals("foo", client.doGet(URL + "/warning").warning("foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/warning").query("Warning", "foo").getResponseAsString()); + } + + @Test + public void customHeader() throws Exception { + assertEquals("foo", client.doGet(URL + "/customHeader").header("Custom", "foo").getResponseAsString()); + assertEquals("foo", client.doGet(URL + "/customHeader").query("Custom", "foo").getResponseAsString()); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java index 77bc2c0..f59295d 100644 --- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java +++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ParamsTest.java @@ -16,6 +16,7 @@ import static javax.servlet.http.HttpServletResponse.*; import static org.apache.juneau.rest.test.TestUtils.*; import static org.junit.Assert.*; +import java.io.*; import java.util.*; import org.apache.http.*; @@ -31,6 +32,8 @@ public class ParamsTest extends RestTestcase { private static String URL = "/testParams"; private static boolean debug = false; + private static RestClient CLIENT = TestMicroservice.DEFAULT_CLIENT; + //==================================================================================================== // Basic tests //==================================================================================================== @@ -712,4 +715,141 @@ public class ParamsTest extends RestTestcase { client.closeQuietly(); } + + + //==================================================================================================== + // Test other available object types as parameters. + //==================================================================================================== + + @Test + public void testOtherResourceBundle() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/ResourceBundle").acceptLanguage("en-US").getResponseAsString(); + assertEquals("\"bar\"", r); + r = CLIENT.doGet(URL + "/otherObjects/ResourceBundle").acceptLanguage("ja-JP").getResponseAsString(); + assertEquals("\"baz\"", r); + } + + @Test + public void testOtherMessages() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/MessageBundle").acceptLanguage("en-US").getResponseAsString(); + assertEquals("\"bar\"", r); + r = CLIENT.doGet(URL + "/otherObjects/MessageBundle").acceptLanguage("ja-JP").getResponseAsString(); + assertEquals("\"baz\"", r); + } + + @Test + public void testOtherInputStream() throws IOException { + String r = CLIENT.doPost(URL + "/otherObjects/InputStream").input(new StringReader("foo")).getResponseAsString(); + assertEquals("\"foo\"", r); + } + + @Test + public void testOtherServletInputStream() throws Exception { + String r = CLIENT.doPost(URL + "/otherObjects/ServletInputStream").input(new StringReader("foo")).getResponseAsString(); + assertEquals("\"foo\"", r); + } + + @Test + public void testOtherReader() throws Exception { + String r = CLIENT.doPost(URL + "/otherObjects/Reader").input(new StringReader("foo")).getResponseAsString(); + assertEquals("\"foo\"", r); + } + + @Test + public void testOtherOutputStream() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/OutputStream").getResponseAsString(); + assertEquals("OK", r); + } + + @Test + public void testOtherServletOutputStream() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/ServletOutputStream").getResponseAsString(); + assertEquals("OK", r); + } + + @Test + public void testOtherWriter() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/Writer").getResponseAsString(); + assertEquals("OK", r); + } + + @Test + public void testOtherRequestHeaders() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/RequestHeaders").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherRequestQuery() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/RequestQuery").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherRequestFormData() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/RequestFormData").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherHttpMethod() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/HttpMethod").getResponseAsString(); + assertEquals("\"GET\"", r); + } + + @Test + public void testOtherLogger() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/Logger").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherJuneauLogger() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/JuneauLogger").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherRestContext() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/RestContext").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherParser() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/Parser").getResponseAsString(); + assertEquals("\"org.apache.juneau.json.JsonParser\"", r); + } + + @Test + public void testOtherLocale() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/Locale").acceptLanguage("en-US").getResponseAsString(); + assertEquals("\"en_US\"", r); + r = CLIENT.doGet(URL + "/otherObjects/Locale").acceptLanguage("ja-JP").getResponseAsString(); + assertEquals("\"ja_JP\"", r); + } + + @Test + public void testOtherSwagger() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/Swagger").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherRequestPathMatch() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/RequestPathMatch").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherRequestBody() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/RequestBody").getResponseAsString(); + assertEquals("true", r); + } + + @Test + public void testOtherConfigFile() throws Exception { + String r = CLIENT.doGet(URL + "/otherObjects/ConfigFile").getResponseAsString(); + assertEquals("true", r); + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java ---------------------------------------------------------------------- diff --git a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java index 985c115..dfb0c54 100644 --- a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java +++ b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/_TestSuite.java @@ -37,6 +37,7 @@ import org.junit.runners.Suite.*; FormDataTest.class, GroupsTest.class, GzipTest.class, + HeadersTest.class, InheritanceTest.class, InterfaceProxyTest.class, JacocoDummyTest.class, http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest/src/main/java/org/apache/juneau/rest/RestCallHandler.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestCallHandler.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestCallHandler.java index 676e9ae..99a051c 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestCallHandler.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestCallHandler.java @@ -176,6 +176,9 @@ public class RestCallHandler { onSuccess(req, res, System.currentTimeMillis() - startTime); + // Make sure our writer in RestResponse gets written. + res.flushBuffer(); + } catch (RestException e) { handleError(r1, r2, e); } catch (Throwable e) { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java index 18d0e2f..d75e613 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestParamDefaults.java @@ -96,7 +96,7 @@ class RestParamDefaults { ServletOutputStreamObject.class, WriterObject.class, RequestHeadersObject.class, - RequestQueryParamsObject.class, + RequestQueryObject.class, RequestFormDataObject.class, HttpMethodObject.class, LoggerObject.class, @@ -105,7 +105,7 @@ class RestParamDefaults { ParserObject.class, LocaleObject.class, SwaggerObject.class, - RequestPathParamsObject.class, + RequestPathMatchObject.class, RequestBodyObject.class, ConfigFileObject.class, }; @@ -794,9 +794,9 @@ class RestParamDefaults { } } - static final class RequestQueryParamsObject extends RestParam { + static final class RequestQueryObject extends RestParam { - protected RequestQueryParamsObject() { + protected RequestQueryObject() { super(OTHER, null, RequestQuery.class); } @@ -902,9 +902,9 @@ class RestParamDefaults { } } - static final class RequestPathParamsObject extends RestParam { + static final class RequestPathMatchObject extends RestParam { - protected RequestPathParamsObject() { + protected RequestPathMatchObject() { super(OTHER, null, RequestPathMatch.class); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/b983a7f6/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java ---------------------------------------------------------------------- diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java index 2bde785..524c8f3 100644 --- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java +++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestResponse.java @@ -61,6 +61,7 @@ public final class RestResponse extends HttpServletResponseWrapper { UrlEncodingSerializer urlEncodingSerializer; // The serializer used to convert arguments passed into Redirect objects. private EncoderGroup encoders; private ServletOutputStream os; + private PrintWriter w; /** * Constructor. @@ -361,14 +362,17 @@ public final class RestResponse extends HttpServletResponseWrapper { } private PrintWriter getWriter(boolean raw) throws IOException { + if (w != null) + return w; + // If plain text requested, override it now. - if (request.isPlainText()) { + if (request.isPlainText()) setHeader("Content-Type", "text/plain"); - } try { OutputStream out = (raw ? getOutputStream() : getNegotiatedOutputStream()); - return new PrintWriter(new OutputStreamWriter(out, getCharacterEncoding())); + w = new PrintWriter(new OutputStreamWriter(out, getCharacterEncoding())); + return w; } catch (UnsupportedEncodingException e) { String ce = getCharacterEncoding(); setCharacterEncoding("UTF-8"); @@ -477,4 +481,13 @@ public final class RestResponse extends HttpServletResponseWrapper { properties.put(HtmlDocSerializerContext.HTMLDOC_links, links); return this; } + + @Override /* ServletResponse */ + public void flushBuffer() throws IOException { + if (w != null) + w.flush(); + if (os != null) + os.flush(); + super.flushBuffer(); + } } \ No newline at end of file
