This is an automated email from the ASF dual-hosted git repository. jamesbognar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push: new 022fec5 RestClient tests. 022fec5 is described below commit 022fec5d019d4b630e57d31c53d576d4d9d175e1 Author: JamesBognar <jamesbog...@apache.org> AuthorDate: Tue Mar 31 20:32:08 2020 -0400 RestClient tests. --- .../juneau/rest/client2/RestClientBuilderTest.java | 2 +- .../rest/client2/BasicRestCallInterceptor.java | 11 ++++ .../juneau/rest/client2/RestCallException.java | 2 +- .../juneau/rest/client2/RestCallInterceptor.java | 4 +- .../juneau/rest/client2/RestClientBuilder.java | 12 ++++- .../juneau/rest/client2/RestResponseBody.java | 62 +++++++++++----------- .../rest/client2/ext/SerializedHttpEntity.java | 2 +- .../client2/logging/ConsoleRestCallLogger.java | 4 ++ .../rest/client2/logging/RestCallLogger.java | 6 +-- .../apache/juneau/rest/mock2/MockRestClient.java | 2 +- 10 files changed, 63 insertions(+), 44 deletions(-) diff --git a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java index f8431d5..556b450 100644 --- a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java +++ b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientBuilderTest.java @@ -1871,7 +1871,7 @@ public class RestClientBuilderTest { .assertContains("OK"); } - public static class XRestCallInterceptor implements RestCallInterceptor { + public static class XRestCallInterceptor extends BasicRestCallInterceptor { public static int x; @Override public void onInit(RestRequest req) throws Exception { diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/BasicRestCallInterceptor.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/BasicRestCallInterceptor.java index 8e7dfb6..95c3412 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/BasicRestCallInterceptor.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/BasicRestCallInterceptor.java @@ -12,6 +12,11 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.client2; +import java.io.*; + +import org.apache.http.*; +import org.apache.http.protocol.*; + /** * A default implementation of a {@link RestCallInterceptor}. * @@ -22,6 +27,12 @@ public abstract class BasicRestCallInterceptor implements RestCallInterceptor { @Override /* RestCallInterceptor */ public void onInit(RestRequest req) throws Exception {} + @Override /* HttpRequestInterceptor */ + public void process(HttpRequest request, HttpContext context) {} + + @Override /* HttpResponseInterceptor */ + public void process(HttpResponse response, HttpContext context) throws HttpException, IOException {} + @Override /* RestCallInterceptor */ public void onConnect(RestRequest req, RestResponse res) throws Exception {} diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallException.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallException.java index 6cff971..5bab939 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallException.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallException.java @@ -30,7 +30,7 @@ import org.apache.juneau.reflect.*; /** * Exception representing a <c>400+</c> HTTP response code against a remote resource or other exception. */ -public final class RestCallException extends IOException { +public final class RestCallException extends HttpException { private static final long serialVersionUID = 1L; diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallInterceptor.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallInterceptor.java index 584d760..0241d01 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallInterceptor.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallInterceptor.java @@ -12,6 +12,8 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.client2; +import org.apache.http.*; + /** * Used to intercept http connection responses to allow modification of that response before processing and for * listening for call lifecycle events. @@ -25,7 +27,7 @@ package org.apache.juneau.rest.client2; * <li class='jm'>{@link RestClientBuilder#interceptors(RestCallInterceptor...)} * </ul> */ -public interface RestCallInterceptor { +public interface RestCallInterceptor extends HttpRequestInterceptor, HttpResponseInterceptor { /** * Called immediately after {@link RestRequest} object is created and all headers/query/form-data has been diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java index 16435bd..032ce65 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClientBuilder.java @@ -1508,11 +1508,15 @@ public class RestClientBuilder extends BeanContextBuilder { * * @param values The values to add to this setting. * @return This object (for method chaining). + * @throws Exception If one or more interceptors could not be created. */ @SuppressWarnings("unchecked") @ConfigurationProperty - public RestClientBuilder interceptors(Class<? extends RestCallInterceptor>...values) { - return prependTo(RESTCLIENT_interceptors, values); + public RestClientBuilder interceptors(Class<? extends RestCallInterceptor>...values) throws Exception { + RestCallInterceptor[] x = new RestCallInterceptor[values.length]; + for (int i = 0; i < values.length; i++) + x[i] = values[i].newInstance(); + return interceptors(x); } /** @@ -1530,6 +1534,10 @@ public class RestClientBuilder extends BeanContextBuilder { */ @ConfigurationProperty public RestClientBuilder interceptors(RestCallInterceptor...value) { + for (RestCallInterceptor r : value) { + addInterceptorLast((HttpRequestInterceptor)r); + addInterceptorLast((HttpResponseInterceptor)r); + } return prependTo(RESTCLIENT_interceptors, value); } diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java index 906fde8..7d2b5cd 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponseBody.java @@ -225,9 +225,9 @@ public class RestResponseBody implements HttpEntity { * @return * The HTTP response message body input stream, never <jk>null</jk>. * <br>For responses without a body(e.g. HTTP 204), returns an empty stream. - * @throws RestCallException If a stream or illegal state exception was thrown. + * @throws IOException If a stream or illegal state exception was thrown. */ - public InputStream asInputStream() throws RestCallException { + public InputStream asInputStream() throws IOException { try { if (cache != null) return new ByteArrayInputStream(cache); @@ -247,17 +247,23 @@ public class RestResponseBody implements HttpEntity { is = new EofSensorInputStream(is, new EofSensorWatcher() { @Override public boolean eofDetected(InputStream wrapped) throws IOException { - response.close(); + try { + response.close(); + } catch (RestCallException e) {} return true; } @Override public boolean streamClosed(InputStream wrapped) throws IOException { - response.close(); + try { + response.close(); + } catch (RestCallException e) {} return true; } @Override public boolean streamAbort(InputStream wrapped) throws IOException { - response.close(); + try { + response.close(); + } catch (RestCallException e) {} return true; } }); @@ -265,8 +271,8 @@ public class RestResponseBody implements HttpEntity { isConsumed = true; return is; - } catch (UnsupportedOperationException | IOException e) { - throw new RestCallException(e); + } catch (UnsupportedOperationException | RestCallException e) { + throw new IOException(e); } } @@ -288,9 +294,9 @@ public class RestResponseBody implements HttpEntity { * @return * The HTTP response message body reader, never <jk>null</jk>. * <br>For responses without a body(e.g. HTTP 204), returns an empty reader. - * @throws RestCallException If an exception occurred. + * @throws IOException If an exception occurred. */ - public Reader asReader() throws RestCallException { + public Reader asReader() throws IOException { // Figure out what the charset of the response is. String cs = null; @@ -322,13 +328,13 @@ public class RestResponseBody implements HttpEntity { * @return * The HTTP response message body reader, never <jk>null</jk>. * <br>For responses without a body(e.g. HTTP 204), returns an empty reader. - * @throws RestCallException If an exception occurred. + * @throws IOException If an exception occurred. */ - public Reader asReader(String charset) throws RestCallException { + public Reader asReader(String charset) throws IOException { try { return new InputStreamReader(asInputStream(), charset == null ? "UTF-8" : charset); } catch (UnsupportedEncodingException e) { - throw new RestCallException(e); + throw new IOException(e); } } @@ -349,14 +355,10 @@ public class RestResponseBody implements HttpEntity { * * @param os The output stream to pipe the output to. * @return The response object (for method chaining). - * @throws RestCallException If an IO exception occurred. + * @throws IOException If an IO exception occurred. */ - public RestResponse pipeTo(OutputStream os) throws RestCallException { - try { - IOPipe.create(asInputStream(), os).run(); - } catch (IOException e) { - throw new RestCallException(e); - } + public RestResponse pipeTo(OutputStream os) throws IOException { + IOPipe.create(asInputStream(), os).run(); return response; } @@ -379,9 +381,9 @@ public class RestResponseBody implements HttpEntity { * * @param w The writer to pipe the output to. * @return The response object (for method chaining). - * @throws RestCallException If an IO exception occurred. + * @throws IOException If an IO exception occurred. */ - public RestResponse pipeTo(Writer w) throws RestCallException { + public RestResponse pipeTo(Writer w) throws IOException { return pipeTo(w, false); } @@ -405,9 +407,9 @@ public class RestResponseBody implements HttpEntity { * The charset to use for the reader. * <br>If <jk>null</jk>, <js>"UTF-8"</js> is used. * @return The response object (for method chaining). - * @throws RestCallException If an IO exception occurred. + * @throws IOException If an IO exception occurred. */ - public RestResponse pipeTo(Writer w, String charset) throws RestCallException { + public RestResponse pipeTo(Writer w, String charset) throws IOException { return pipeTo(w, charset, false); } @@ -431,9 +433,9 @@ public class RestResponseBody implements HttpEntity { * @param w The writer to write the output to. * @param byLines Flush the writers after every line of output. * @return The response object (for method chaining). - * @throws RestCallException If an IO exception occurred. + * @throws IOException If an IO exception occurred. */ - public RestResponse pipeTo(Writer w, boolean byLines) throws RestCallException { + public RestResponse pipeTo(Writer w, boolean byLines) throws IOException { return pipeTo(w, null, byLines); } @@ -458,14 +460,10 @@ public class RestResponseBody implements HttpEntity { * The charset to use for the reader. * <br>If <jk>null</jk>, <js>"UTF-8"</js> is used. * @return The response object (for method chaining). - * @throws RestCallException If an IO exception occurred. + * @throws IOException If an IO exception occurred. */ - public RestResponse pipeTo(Writer w, String charset, boolean byLines) throws RestCallException { - try { - IOPipe.create(asReader(charset), w).byLines(byLines).run(); - } catch (IOException e) { - throw new RestCallException(e); - } + public RestResponse pipeTo(Writer w, String charset, boolean byLines) throws IOException { + IOPipe.create(asReader(charset), w).byLines(byLines).run(); return response; } diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHttpEntity.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHttpEntity.java index 0fa9997..e677f22 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHttpEntity.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/ext/SerializedHttpEntity.java @@ -70,7 +70,7 @@ public final class SerializedHttpEntity extends BasicHttpEntity { } } } catch (SerializeException e) { - throw new org.apache.juneau.rest.client2.RestCallException(e); + throw new IOException(e); } } } diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/ConsoleRestCallLogger.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/ConsoleRestCallLogger.java index 18adc37..8273080 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/ConsoleRestCallLogger.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/ConsoleRestCallLogger.java @@ -12,6 +12,10 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.client2.logging; +import java.io.*; + +import org.apache.http.*; +import org.apache.http.protocol.*; import org.apache.juneau.rest.client2.*; /** diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/RestCallLogger.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/RestCallLogger.java index 129e055..8bf7220 100644 --- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/RestCallLogger.java +++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/logging/RestCallLogger.java @@ -23,7 +23,7 @@ import org.apache.juneau.rest.client2.*; /** * Specialized intercepter for logging calls to a log file. */ -public abstract class RestCallLogger implements RestCallInterceptor { +public abstract class RestCallLogger extends BasicRestCallInterceptor { /** * Returns <jk>true</jk> if the specified request/response should be logged. @@ -64,10 +64,6 @@ public abstract class RestCallLogger implements RestCallInterceptor { } @Override /* RestCallInterceptor */ - public void onInit(RestRequest req) { - } - - @Override /* RestCallInterceptor */ public void onConnect(RestRequest req, RestResponse res) { if (shouldLog(req, null)) res.getBody().cache(); diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java index 0f88b48..dd9d1ad 100644 --- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java +++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClient.java @@ -1155,7 +1155,7 @@ public class MockRestClient extends RestClientBuilder { @Override /* GENERATED - RestClientBuilder */ @SuppressWarnings("unchecked") - public MockRestClient interceptors(java.lang.Class<? extends org.apache.juneau.rest.client2.RestCallInterceptor>...values) { + public MockRestClient interceptors(java.lang.Class<? extends org.apache.juneau.rest.client2.RestCallInterceptor>...values) throws Exception { super.interceptors(values); return this; }