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 64bde2a  RestClient tests
64bde2a is described below

commit 64bde2ae99748170c2f6e4daa5d459da2963bd52
Author: JamesBognar <[email protected]>
AuthorDate: Sat Jun 13 12:57:59 2020 -0400

    RestClient tests
---
 .../org/apache/juneau/rest/test/MockRestTest.java  |  58 --------
 .../java/org/apache/juneau/rest/test/Root.java     |   1 -
 .../org/apache/juneau/rest/test/_TestSuite.java    |   6 -
 .../rest/test/client/RestClientResource.java       |  38 -----
 .../juneau/rest/test/client/RestClientTest.java    | 157 ---------------------
 juneau-rest/juneau-rest-client-utest/pom.xml       |   5 +
 .../juneau/rest/client2}/ClientFuturesTest.java    |   4 +-
 .../apache/juneau/rest/client2}/FormDataTest.java  |   6 +-
 .../juneau/rest/client2}/InterfaceProxyTest.java   |   2 +-
 .../juneau/rest/client2}/RequestBeanProxyTest.java |   2 +-
 .../apache/juneau/rest/client2/RestClientTest.java |  57 +++++++-
 .../rest/client2/BasicRestCallInterceptor.java     |  11 --
 .../juneau/rest/client2/RestCallInterceptor.java   |   4 +-
 .../org/apache/juneau/rest/client2/RestClient.java |  43 ++++--
 .../juneau/rest/client2/RestClientBuilder.java     |  51 +++++--
 .../apache/juneau/rest/client2/RestRequest.java    |  11 +-
 .../apache/juneau/rest/client2/RestResponse.java   |   6 +-
 .../juneau/rest/mock2/MockRestClientBuilder.java   |   5 +-
 18 files changed, 139 insertions(+), 328 deletions(-)

diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/MockRestTest.java
 
b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/MockRestTest.java
deleted file mode 100644
index 58f465b..0000000
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/MockRestTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-// 
***************************************************************************************************************************
-// * 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.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.rest.test;
-
-import static org.apache.juneau.http.HttpMethodName.*;
-import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
-
-import org.apache.juneau.http.annotation.Body;
-import org.apache.juneau.json.*;
-import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.client2.*;
-import org.apache.juneau.rest.mock2.*;
-import org.junit.*;
-
-@FixMethodOrder(NAME_ASCENDING)
-public class MockRestTest {
-
-       
//=================================================================================================================
-       // Basic tests
-       
//=================================================================================================================
-
-       @Rest
-       public static class A {
-               @RestMethod(name=PUT, path="/a01")
-               public String a01(@Body String body) {
-                       return body;
-               }
-
-               @RestMethod(name=PUT, path="/a02", 
serializers=JsonSerializer.class, parsers=JsonParser.class)
-               public String a02(@Body String body) {
-                       return body;
-               }
-       }
-
-       @Test
-       public void a01() throws Exception {
-               RestClient rc = MockRestClient.build(A.class);
-               assertEquals("OK", rc.put("/a01", 
"OK").run().getBody().asString());
-       }
-
-       @Test
-       public void a02() throws Exception {
-               RestClient rc = MockRestClient.buildJson(A.class);
-               assertEquals("OK", rc.put("/a02", 
"OK").run().getBody().as(String.class));
-       }
-}
-
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/Root.java
 
b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/Root.java
index e2b0a4e..ee2e5e2 100644
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/Root.java
+++ 
b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/Root.java
@@ -28,7 +28,6 @@ import org.apache.juneau.rest.test.client.*;
                LogsResource.class,
                ConfigResource.class,
                LargePojosResource.class,
-               RestClientResource.class,
                ThirdPartyProxyResource.class,
                ShutdownResource.class,
        }
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
 
b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
index f3ad721..cbc9247 100644
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
+++ 
b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/_TestSuite.java
@@ -25,13 +25,7 @@ import org.junit.runners.Suite.*;
  */
 @RunWith(Suite.class)
 @SuiteClasses({
-       ClientFuturesTest.class,
        ConfigTest.class,
-       FormDataTest.class,
-       InterfaceProxyTest.class,
-       MockRestTest.class,
-       RequestBeanProxyTest.class,
-       RestClientTest.class,
        ThirdPartyProxyTest.class,
 })
 public class _TestSuite {
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientResource.java
 
b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientResource.java
deleted file mode 100644
index 3c74a2a..0000000
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientResource.java
+++ /dev/null
@@ -1,38 +0,0 @@
-// 
***************************************************************************************************************************
-// * 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.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.rest.test.client;
-
-import static org.apache.juneau.http.HttpMethodName.*;
-
-import java.io.*;
-
-import org.apache.juneau.rest.*;
-import org.apache.juneau.rest.annotation.*;
-
-/**
- * JUnit automated testcase resource.
- */
-@Rest(
-       path="/testRestClient"
-)
-public class RestClientResource extends BasicRestServlet {
-       private static final long serialVersionUID = 1L;
-
-       
//====================================================================================================
-       // Echo response
-       
//====================================================================================================
-       @RestMethod(name=POST, path="/")
-       public Reader test1(RestRequest req) throws Exception {
-               return new StringReader(req.getBody().asString());
-       }
-}
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientTest.java
 
b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientTest.java
deleted file mode 100644
index f92dad8..0000000
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RestClientTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-// 
***************************************************************************************************************************
-// * 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.                                              *
-// 
***************************************************************************************************************************
-package org.apache.juneau.rest.test.client;
-
-import static org.apache.juneau.rest.testutils.TestUtils.*;
-import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
-
-import java.util.regex.*;
-
-import org.apache.http.entity.*;
-import org.apache.juneau.rest.client2.*;
-import org.apache.juneau.rest.test.*;
-import org.apache.juneau.utils.*;
-import org.junit.*;
-
-@FixMethodOrder(NAME_ASCENDING)
-public class RestClientTest extends RestTestcase {
-
-       private static String URL = "/testRestClient";
-
-       
//====================================================================================================
-       // successPattern()
-       
//====================================================================================================
-       @Test
-       public void testSuccessPattern() throws Exception {
-               RestClient c = TestMicroservice.DEFAULT_CLIENT;
-
-               Mutable<Integer> rc = new Mutable<>();
-               Mutable<String> r = new Mutable<>();
-               c.post(URL, new StringEntity("xxxSUCCESSxxx"))
-                       .run()
-                       .getStatusCode(rc)
-                       .cacheBody()
-                       .assertBody().contains("SUCCESS")
-                       .getBody().asString(r);
-               assertEquals("xxxSUCCESSxxx", r.get());
-               assertEquals(200, rc.get().intValue());
-
-               try {
-                       c.post(URL, new StringEntity("xxxFAILURExxx"))
-                               .run()
-                               .assertBody().contains("SUCCESS");
-                       fail();
-               } catch (AssertionError e) {
-                       // OK
-               }
-       }
-
-       
//====================================================================================================
-       // failurePattern()
-       
//====================================================================================================
-       @Test
-       public void testFailurePattern() throws Exception {
-               RestClient c = TestMicroservice.DEFAULT_CLIENT;
-
-               Mutable<Integer> rc = new Mutable<>();
-               Mutable<String> r = new Mutable<>();
-               c.post(URL, new StringEntity("xxxSUCCESSxxx"))
-                       .run()
-                       .getStatusCode(rc)
-                       .cacheBody()
-                       .assertBody().passes(x -> ! x.contains("FAILURE"))
-                       .getBody().asString(r);
-               assertEquals("xxxSUCCESSxxx", r.get());
-               assertEquals(200, rc.get().intValue());
-
-               try {
-                       c.post(URL, new StringEntity("xxxFAILURExxx"))
-                               .run()
-                               .assertBody().passes(x -> ! 
x.contains("FAILURE"));
-                       fail();
-               } catch (AssertionError e) {
-                       // OK
-               }
-       }
-
-       
//====================================================================================================
-       // captureResponse()/getCapturedResponse()
-       
//====================================================================================================
-       @Test
-       public void testCaptureResponse() throws Exception {
-               RestClient c = TestMicroservice.DEFAULT_CLIENT;
-               RestResponse r = c
-                       .post(URL, new StringEntity("xxx"))
-                       .run()
-                       .cacheBody()
-                       .getBody().toResponse();
-
-               assertEquals("xxx", r.getBody().asString());
-               assertEquals("xxx", r.getBody().asString());
-
-               r = c.post(URL, new StringEntity("xxx")).run();
-               assertEquals("xxx", r.getBody().asString());
-
-               try {
-                       r.getBody().asString();
-                       fail();
-               } catch (IllegalStateException e) {
-                       assertEquals("Method cannot be called.  Response has 
already been consumed.  Consider using the RestResponse.cacheBody() method.", 
e.getLocalizedMessage());
-               }
-       }
-
-       
//====================================================================================================
-       // addResponsePattern()
-       
//====================================================================================================
-       @Test
-       public void testAddResponsePattern() throws Exception {
-               RestClient c = TestMicroservice.DEFAULT_CLIENT;
-               String r;
-
-               Mutable<Matcher> m = Mutable.create();
-               r = c.post(URL, new StringEntity("x=1,y=2"))
-                       .run()
-                       .cacheBody()
-                       .getBody().asMatcher(m, "x=(\\d+),y=(\\S+)")
-                       .getBody().asString();
-               assertEquals("x=1,y=2", r);
-               assertTrue(m.get().matches());
-               assertObjectEquals("['x=1,y=2','1','2']", 
m.get().toMatchResult());
-
-               r = c.post(URL, new StringEntity("x=1,y=2\nx=3,y=4"))
-                       .run()
-                       .cacheBody()
-                       .getBody().asMatcher(m, "x=(\\d+),y=(\\S+)")
-                       .getBody().asString();
-               assertEquals("x=1,y=2\nx=3,y=4", r);
-               assertTrue(m.get().find());
-               assertObjectEquals("['x=1,y=2','1','2']", 
m.get().toMatchResult());
-               assertTrue(m.get().find());
-               assertObjectEquals("['x=3,y=4','3','4']", 
m.get().toMatchResult());
-
-               c.post(URL, new 
StringEntity("x=1")).run().getBody().asMatcher("x=(\\d+),y=(\\S+)");
-               assertFalse(m.get().find());
-
-               Mutable<Matcher> m2 = Mutable.create();
-               c.post(URL, new StringEntity("x=1,y=2"))
-                       .run()
-                       .cacheBody()
-                       .getBody().asMatcher(m, "x=(\\d+),y=(\\S+)")
-                       .getBody().asMatcher(m2, "x=(\\d+),y=(\\S+)");
-               assertTrue(m.get().matches());
-               assertTrue(m2.get().matches());
-               assertObjectEquals("['x=1,y=2','1','2']", 
m.get().toMatchResult());
-               assertObjectEquals("['x=1,y=2','1','2']", 
m2.get().toMatchResult());
-       }
-}
diff --git a/juneau-rest/juneau-rest-client-utest/pom.xml 
b/juneau-rest/juneau-rest-client-utest/pom.xml
index 4426562..e8a6135 100644
--- a/juneau-rest/juneau-rest-client-utest/pom.xml
+++ b/juneau-rest/juneau-rest-client-utest/pom.xml
@@ -56,6 +56,11 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.juneau</groupId>
+                       <artifactId>juneau-rest-server-rdf</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.juneau</groupId>
                        <artifactId>juneau-core-utest</artifactId>
                        <version>${project.version}</version>
                        <type>test-jar</type>
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ClientFuturesTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/ClientFuturesTest.java
similarity index 93%
rename from 
juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ClientFuturesTest.java
rename to 
juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/ClientFuturesTest.java
index a43a57f..bab1196 100644
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/ClientFuturesTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/ClientFuturesTest.java
@@ -10,7 +10,7 @@
 // * "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.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.rest.test.client;
+package org.apache.juneau.rest.client2;
 
 import static org.apache.juneau.rest.testutils.TestUtils.*;
 import static org.junit.Assert.*;
@@ -21,8 +21,6 @@ import java.util.concurrent.*;
 import org.apache.juneau.collections.*;
 import org.apache.juneau.rest.RestRequest;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.client2.*;
-import org.apache.juneau.rest.client2.RestResponse;
 import org.apache.juneau.rest.mock2.*;
 import org.junit.*;
 
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/FormDataTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/FormDataTest.java
similarity index 94%
rename from 
juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/FormDataTest.java
rename to 
juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/FormDataTest.java
index 24fb3c1..3d18668 100644
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/FormDataTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/FormDataTest.java
@@ -10,7 +10,7 @@
 // * "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.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.rest.test.client;
+package org.apache.juneau.rest.client2;
 
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.junit.Assert.*;
@@ -23,13 +23,11 @@ import org.apache.juneau.collections.*;
 import org.apache.juneau.http.*;
 import org.apache.juneau.rest.RestRequest;
 import org.apache.juneau.rest.annotation.*;
-import org.apache.juneau.rest.client2.*;
 import org.apache.juneau.rest.mock2.*;
-import org.apache.juneau.rest.test.*;
 import org.junit.*;
 
 @FixMethodOrder(NAME_ASCENDING)
-public class FormDataTest extends RestTestcase {
+public class FormDataTest {
 
        
//=================================================================================================================
        // Basic tests
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/InterfaceProxyTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/InterfaceProxyTest.java
similarity index 97%
rename from 
juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/InterfaceProxyTest.java
rename to 
juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/InterfaceProxyTest.java
index f24970d..04e94d0 100644
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/InterfaceProxyTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/InterfaceProxyTest.java
@@ -10,7 +10,7 @@
 // * "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.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.rest.test.client;
+package org.apache.juneau.rest.client2;
 
 import static java.util.Arrays.*;
 import static org.apache.juneau.http.HttpMethodName.*;
diff --git 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RequestBeanProxyTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RequestBeanProxyTest.java
similarity index 97%
rename from 
juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RequestBeanProxyTest.java
rename to 
juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RequestBeanProxyTest.java
index b534334..453b644 100644
--- 
a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/client/RequestBeanProxyTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RequestBeanProxyTest.java
@@ -10,7 +10,7 @@
 // * "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.                                              *
 // 
***************************************************************************************************************************
-package org.apache.juneau.rest.test.client;
+package org.apache.juneau.rest.client2;
 
 import static org.apache.juneau.http.HttpMethodName.*;
 import static org.apache.juneau.internal.ArrayUtils.*;
diff --git 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
index 59f9a89..4781abb 100644
--- 
a/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
+++ 
b/juneau-rest/juneau-rest-client-utest/src/test/java/org/apache/juneau/rest/client2/RestClientTest.java
@@ -889,6 +889,7 @@ public class RestClientTest {
        public static class B02a extends BasicRestCallInterceptor {
                @Override /* RestCallInterceptor */
                public void onConnect(RestRequest req, RestResponse res) throws 
Exception {
+                       super.onConnect(req, res);
                        req.log(Level.WARNING, "Foo");
                        req.log(Level.WARNING, new RuntimeException(), "Foo");
                        res.log(Level.WARNING, "Foo");
@@ -896,7 +897,6 @@ public class RestClientTest {
                }
        }
 
-       @SuppressWarnings("unchecked")
        @Test
        public void b02a_loggingOther() throws Exception {
                MockLogger ml = new MockLogger();
@@ -936,6 +936,60 @@ public class RestClientTest {
                assertTrue(B03.METHOD_CALLED);
        }
 
+       public static class B04a extends BasicRestCallInterceptor {
+               @Override /* HttpRequestInterceptor */
+               public void onInit(RestRequest req) throws Exception { throw 
new RuntimeException("foo"); }
+       }
+       public static class B04d extends BasicRestCallInterceptor {
+               @Override /* RestCallInterceptor */
+               public void onConnect(RestRequest req, RestResponse res) throws 
Exception { throw new RuntimeException("foo"); }
+       }
+       public static class B04e extends BasicRestCallInterceptor {
+               @Override /* RestCallInterceptor */
+               public void onClose(RestRequest req, RestResponse res) throws 
Exception { throw new RuntimeException("foo"); }
+       }
+
+       @Test
+       public void b04_restCallInterceptor_exceptionHandling() throws 
Exception {
+               try {
+                       MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .interceptors(B04a.class)
+                       .build()
+                       .post("/bean", bean)
+                       .complete();
+                       fail();
+               } catch (RestCallException e) {
+                       assertEquals("foo", 
e.getCause(RuntimeException.class).getMessage());
+               }
+               try {
+                       MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .interceptors(B04d.class)
+                       .build()
+                       .post("/bean", bean)
+                       .complete();
+                       fail();
+               } catch (RestCallException e) {
+                       assertEquals("foo", 
e.getCause(RuntimeException.class).getMessage());
+               }
+               try {
+                       MockRestClient
+                       .create(A.class)
+                       .simpleJson()
+                       .interceptors(B04e.class)
+                       .build()
+                       .post("/bean", bean)
+                       .complete();
+                       fail();
+               } catch (RestCallException e) {
+                       assertEquals("foo", 
e.getCause(RuntimeException.class).getMessage());
+               }
+       }
+
+
        
//------------------------------------------------------------------------------------------------------------------
        // Passthrough methods for HttpClientBuilder.
        
//------------------------------------------------------------------------------------------------------------------
@@ -2971,7 +3025,6 @@ public class RestClientTest {
                }
        }
 
-       @SuppressWarnings("unchecked")
        @Test
        public void k07_restClient_interceptorsClasses() throws Exception {
                MockRestClient
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 95c3412..8e7dfb6 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,11 +12,6 @@
 // 
***************************************************************************************************************************
 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}.
  *
@@ -27,12 +22,6 @@ 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/RestCallInterceptor.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestCallInterceptor.java
index fd26b3a..91c2d82 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,8 +12,6 @@
 // 
***************************************************************************************************************************
 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.
@@ -48,7 +46,7 @@ import org.apache.http.*;
  *     <li class='jm'>{@link 
RestClientBuilder#interceptors(RestCallInterceptor...)}
  * </ul>
  */
-public interface RestCallInterceptor extends HttpRequestInterceptor, 
HttpResponseInterceptor {
+public interface RestCallInterceptor {
 
        /**
         * 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/RestClient.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
index 27d2dbd..fd5bad5 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestClient.java
@@ -949,7 +949,7 @@ import org.apache.http.client.CookieStore;
  * </ul>
  */
 @ConfigurableContext(nocache=true)
-public class RestClient extends BeanContext implements HttpClient, Closeable, 
RestCallHandler {
+public class RestClient extends BeanContext implements HttpClient, Closeable, 
RestCallHandler, RestCallInterceptor {
 
        
//-------------------------------------------------------------------------------------------------------------------
        // Configurable properties
@@ -2818,7 +2818,7 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
                for (Object o : formData)
                        req.formData(toFormData(o));
 
-               req.interceptors(interceptors);
+               onInit(req);
 
                return req;
        }
@@ -3275,7 +3275,6 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         *
         * <p>
         * Subclasses can override this method to intercept the request and 
perform special modifications.
-        * The default behavior is a no-op.
         *
         * <ul class='seealso'>
         *      <li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
@@ -3284,10 +3283,16 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         * </ul>
         *
         * @param req The HTTP request.
-        * @throws Exception Any exception can be thrown.
+        * @throws RestCallException If any of the interceptors threw an 
exception.
         */
-       public void onInit(RestRequest req) throws Exception {
-               // Default is a no-op.
+       @Override
+       public void onInit(RestRequest req) throws RestCallException {
+               try {
+                       for (RestCallInterceptor rci : interceptors)
+                               rci.onInit(req);
+               } catch (Exception e) {
+                       throw RestCallException.create(e);
+               }
        }
 
        /**
@@ -3295,7 +3300,6 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         *
         * <p>
         * Subclasses can override this method to intercept the response and 
perform special modifications.
-        * The default behavior is a no-op.
         *
         * <ul class='seealso'>
         *      <li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
@@ -3305,10 +3309,16 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         *
         * @param req The HTTP request.
         * @param res The HTTP response.
-        * @throws Exception Any exception can be thrown.
+        * @throws RestCallException If any of the interceptors threw an 
exception.
         */
-       public void onConnect(RestRequest req, RestResponse res) throws 
Exception {
-               // Default is a no-op.
+       @Override
+       public void onConnect(RestRequest req, RestResponse res) throws 
RestCallException {
+               try {
+                       for (RestCallInterceptor rci : interceptors)
+                               rci.onConnect(req, res);
+               } catch (Exception e) {
+                       throw RestCallException.create(e);
+               }
        }
 
        /**
@@ -3316,7 +3326,6 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         *
         * <p>
         * Subclasses can override this method to handle any cleanup operations.
-        * The default behavior is a no-op.
         *
         * <ul class='seealso'>
         *      <li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
@@ -3326,10 +3335,16 @@ public class RestClient extends BeanContext implements 
HttpClient, Closeable, Re
         *
         * @param req The HTTP request.
         * @param res The HTTP response.
-        * @throws Exception Any exception can be thrown.
+        * @throws RestCallException If any of the interceptors threw an 
exception.
         */
-       public void onClose(RestRequest req, RestResponse res) throws Exception 
{
-               // Default is a no-op.
+       @Override
+       public void onClose(RestRequest req, RestResponse res) throws 
RestCallException {
+               try {
+                       for (RestCallInterceptor rci : interceptors)
+                               rci.onClose(req, res);
+               } catch (Exception e) {
+                       throw RestCallException.create(e);
+               }
        }
 
        
//------------------------------------------------------------------------------------------------
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 5c334ed..dddc00b 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
@@ -2763,17 +2763,27 @@ public class RestClientBuilder extends 
BeanContextBuilder {
         *      <li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
         * </ul>
         *
-        * @param values The values to add to this setting.
+        * @param values
+        *      The values to add to this setting.
+        *      <br>Can be implementations of any of the following:
+        *      <ul>
+        *              <li class='jic'>{@link RestCallInterceptor}
+        *              <li class='jic'>{@link HttpRequestInterceptor}
+        *              <li class='jic'>{@link HttpResponseInterceptor}
+        *      </ul>
         * @return This object (for method chaining).
         * @throws Exception If one or more interceptors could not be created.
         */
-       @SuppressWarnings("unchecked")
        @FluentSetter
-       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);
+       public RestClientBuilder interceptors(Class<?>...values) throws 
Exception {
+               for (Class<?> c : values) {
+                       ClassInfo ci = ClassInfo.of(c);
+                       if (ci.isChildOfAny(RestCallInterceptor.class, 
HttpRequestInterceptor.class, HttpResponseInterceptor.class))
+                               interceptors(ci.newInstance());
+                       else
+                               throw new ConfigException("Invalid class of 
type ''{0}'' passed to RestClientBuilder.interceptors.", ci.getSimpleName());
+               }
+               return this;
        }
 
        /**
@@ -2824,16 +2834,31 @@ public class RestClientBuilder extends 
BeanContextBuilder {
         *      <li class='jf'>{@link RestClient#RESTCLIENT_interceptors}
         * </ul>
         *
-        * @param value The values to add to this setting.
+        * @param value
+        *      The values to add to this setting.
+        *      <br>Can be implementations of any of the following:
+        *      <ul>
+        *              <li class='jic'>{@link RestCallInterceptor}
+        *              <li class='jic'>{@link HttpRequestInterceptor}
+        *              <li class='jic'>{@link HttpResponseInterceptor}
+        *      </ul>
         * @return This object (for method chaining).
         */
        @FluentSetter
-       public RestClientBuilder interceptors(RestCallInterceptor...value) {
-               for (RestCallInterceptor r : value) {
-                       addInterceptorLast((HttpRequestInterceptor)r);
-                       addInterceptorLast((HttpResponseInterceptor)r);
+       public RestClientBuilder interceptors(Object...value) {
+               List<RestCallInterceptor> l = new ArrayList<>();
+               for (Object o : value) {
+                       ClassInfo ci = ClassInfo.of(o);
+                       if (! ci.isChildOfAny(HttpRequestInterceptor.class, 
HttpResponseInterceptor.class, RestCallInterceptor.class))
+                               throw new ConfigException("Invalid object of 
type ''{0}'' passed to RestClientBuilder.interceptors.", ci.getSimpleName());
+                       if (o instanceof HttpRequestInterceptor)
+                               addInterceptorLast((HttpRequestInterceptor)o);
+                       if (o instanceof HttpResponseInterceptor)
+                               addInterceptorLast((HttpResponseInterceptor)o);
+                       if (o instanceof RestCallInterceptor)
+                               l.add((RestCallInterceptor)o);
                }
-               return prependTo(RESTCLIENT_interceptors, value);
+               return prependTo(RESTCLIENT_interceptors, l);
        }
 
        /**
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
index 637f671..17bb007 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestRequest.java
@@ -685,16 +685,11 @@ public class RestRequest extends BeanSession implements 
HttpUriRequest, Configur
         * @throws RestCallException If init method on interceptor threw an 
exception.
         */
        public RestRequest interceptors(RestCallInterceptor...interceptors) 
throws RestCallException {
-               for (RestCallInterceptor i : interceptors) {
-                       this.interceptors.add(i);
-                       try {
+               try {
+                       for (RestCallInterceptor i : interceptors) {
+                               this.interceptors.add(i);
                                i.onInit(this);
-                       } catch (Exception e) {
-                               throw RestCallException.create(e);
                        }
-               }
-               try {
-                       client.onInit(this);
                } catch (Exception e) {
                        throw RestCallException.create(e);
                }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
index e2d3e4c..fcab39b 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client2/RestResponse.java
@@ -1001,11 +1001,7 @@ public class RestResponse implements HttpResponse {
                                throw RestCallException.create(e);
                        }
                }
-               try {
-                       client.onClose(request, this);
-               } catch (Exception e) {
-                       throw RestCallException.create(e);
-               }
+               client.onClose(request, this);
        }
 
        
//------------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClientBuilder.java
 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClientBuilder.java
index 6c6d1d6..8739c14 100644
--- 
a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClientBuilder.java
+++ 
b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock2/MockRestClientBuilder.java
@@ -1078,14 +1078,13 @@ public class MockRestClientBuilder extends 
RestClientBuilder {
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       @SuppressWarnings("unchecked")
-       public MockRestClientBuilder interceptors(java.lang.Class<? extends 
org.apache.juneau.rest.client2.RestCallInterceptor>...values) throws Exception{
+       public MockRestClientBuilder interceptors(java.lang.Class<?>...values) 
throws Exception{
                super.interceptors(values);
                return this;
        }
 
        @Override /* GENERATED - RestClientBuilder */
-       public MockRestClientBuilder interceptors(RestCallInterceptor...value) {
+       public MockRestClientBuilder interceptors(Object...value) {
                super.interceptors(value);
                return this;
        }

Reply via email to