You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by il...@apache.org on 2018/08/03 07:33:36 UTC

[cxf] branch 3.2.x-fixes updated: private -> protected + some lambda goodness

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.2.x-fixes by this push:
     new c59005d  private -> protected + some lambda goodness
c59005d is described below

commit c59005dc9ea4a257f5f0abe80906f96bf99ec00f
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Fri Aug 3 09:32:51 2018 +0200

    private -> protected + some lambda goodness
---
 .../apache/cxf/jaxrs/client/AbstractClient.java    | 116 +++++----
 .../apache/cxf/jaxrs/client/ClientProxyImpl.java   | 286 ++++++++++-----------
 .../cxf/jaxrs/client/JAXRSClientFactoryBean.java   |  61 ++---
 3 files changed, 233 insertions(+), 230 deletions(-)

diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
index d8bd43f..223e45d 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/AbstractClient.java
@@ -137,6 +137,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client query(String name, Object...values) {
         addMatrixQueryParamsToBuilder(getCurrentBuilder(), name, ParameterType.QUERY, null, values);
         return this;
@@ -145,6 +146,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client header(String name, Object... values) {
         if (values == null) {
             throw new IllegalArgumentException();
@@ -166,6 +168,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client headers(MultivaluedMap<String, String> map) {
         state.getRequestHeaders().putAll(map);
         return this;
@@ -174,6 +177,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client accept(MediaType... types) {
         for (MediaType mt : types) {
             possiblyAddHeader(HttpHeaders.ACCEPT, JAXRSUtils.mediaTypeToString(mt));
@@ -184,6 +188,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client type(MediaType ct) {
         return type(JAXRSUtils.mediaTypeToString(ct));
     }
@@ -191,6 +196,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client type(String type) {
         state.getRequestHeaders().putSingle(HttpHeaders.CONTENT_TYPE, type);
         return this;
@@ -199,6 +205,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client accept(String... types) {
         for (String type : types) {
             possiblyAddHeader(HttpHeaders.ACCEPT, type);
@@ -209,6 +216,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client cookie(Cookie cookie) {
         possiblyAddHeader(HttpHeaders.COOKIE, cookie.toString());
         return this;
@@ -217,6 +225,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client authorization(Object auth) {
         String value = convertParamValue(auth, null);
         state.getRequestHeaders().putSingle(HttpHeaders.AUTHORIZATION, value);
@@ -226,6 +235,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client modified(Date date, boolean ifNot) {
         SimpleDateFormat dateFormat = HttpUtils.getHttpDateFormat();
         String hName = ifNot ? HttpHeaders.IF_UNMODIFIED_SINCE : HttpHeaders.IF_MODIFIED_SINCE;
@@ -236,6 +246,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client language(String language) {
         state.getRequestHeaders().putSingle(HttpHeaders.CONTENT_LANGUAGE, language);
         return this;
@@ -244,6 +255,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client match(EntityTag tag, boolean ifNot) {
         String hName = ifNot ? HttpHeaders.IF_NONE_MATCH : HttpHeaders.IF_MATCH;
         state.getRequestHeaders().putSingle(hName, tag.toString());
@@ -253,6 +265,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client acceptLanguage(String... languages) {
         for (String s : languages) {
             possiblyAddHeader(HttpHeaders.ACCEPT_LANGUAGE, s);
@@ -263,6 +276,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client acceptEncoding(String... encs) {
         for (String s : encs) {
             possiblyAddHeader(HttpHeaders.ACCEPT_ENCODING, s);
@@ -273,6 +287,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client encoding(String enc) {
         state.getRequestHeaders().putSingle(HttpHeaders.CONTENT_ENCODING, enc);
         return this;
@@ -281,8 +296,9 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public MultivaluedMap<String, String> getHeaders() {
-        MultivaluedMap<String, String> map = new MetadataMap<String, String>(false, true);
+        MultivaluedMap<String, String> map = new MetadataMap<>(false, true);
         map.putAll(state.getRequestHeaders());
         return map;
     }
@@ -290,6 +306,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public URI getBaseURI() {
         return state.getBaseURI();
     }
@@ -297,6 +314,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public URI getCurrentURI() {
         return getCurrentBuilder().clone().buildFromEncoded();
     }
@@ -304,6 +322,7 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Response getResponse() {
         return state.getResponse();
     }
@@ -311,23 +330,26 @@ public abstract class AbstractClient implements Client {
     /**
      * {@inheritDoc}
      */
+    @Override
     public Client reset() {
         state.reset();
         return this;
     }
 
+    @Override
     public void close() {
         if (closed.compareAndSet(false, true)) {
             if (cfg.getBus() == null) {
                 return;
             }
-            for (Closeable c : cfg.getEndpoint().getCleanupHooks()) {
-                try {
-                    c.close();
-                } catch (IOException e) {
-                    //ignore
-                }
-            }
+            cfg.getEndpoint().getCleanupHooks().
+                    forEach(c -> {
+                        try {
+                            c.close();
+                        } catch (IOException e) {
+                            //ignore
+                        }
+                    });
             ClientLifeCycleManager mgr = cfg.getBus().getExtension(ClientLifeCycleManager.class);
             if (null != mgr) {
                 mgr.clientDestroyed(new FrontendClientAdapter(getConfiguration()));
@@ -364,7 +386,7 @@ public abstract class AbstractClient implements Client {
 
     private boolean isDuplicate(String name, String value) {
         List<String> values = state.getRequestHeaders().get(name);
-        return values != null && values.contains(value) ? true : false;
+        return values != null && values.contains(value);
     }
 
     protected ClientState getState() {
@@ -389,9 +411,9 @@ public abstract class AbstractClient implements Client {
 
     protected MultivaluedMap<String, String> getTemplateParametersMap(URITemplate template,
                                                                       List<Object> values) {
-        if (values != null && values.size() != 0) {
+        if (values != null && !values.isEmpty()) {
             List<String> vars = template.getVariables();
-            MultivaluedMap<String, String> templatesMap = new MetadataMap<String, String>(vars.size());
+            MultivaluedMap<String, String> templatesMap = new MetadataMap<>(vars.size());
             for (int i = 0; i < vars.size(); i++) {
                 if (i < values.size()) {
                     templatesMap.add(vars.get(i), values.get(i).toString());
@@ -432,9 +454,9 @@ public abstract class AbstractClient implements Client {
                     currentResponseBuilder.header(entry.getKey(), entry.getValue().get(0));
                     continue;
                 }
-                for (Object valObject : entry.getValue()) {
+                entry.getValue().forEach(valObject -> {
                     if (splitHeaders && valObject instanceof String) {
-                        String val = (String)valObject;
+                        String val = (String) valObject;
                         String[] values;
                         if (val.length() == 0) {
                             values = new String[]{""};
@@ -444,7 +466,7 @@ public abstract class AbstractClient implements Client {
                             values = parseQuotedHeaderValue(val);
                         } else {
                             boolean splitPossible = !(HttpHeaders.SET_COOKIE.equalsIgnoreCase(entry.getKey())
-                                && val.toUpperCase().contains(HttpHeaders.EXPIRES.toUpperCase()));
+                                    && val.toUpperCase().contains(HttpHeaders.EXPIRES.toUpperCase()));
                             values = splitPossible ? val.split(",") : new String[]{val};
                         }
                         for (String s : values) {
@@ -456,7 +478,7 @@ public abstract class AbstractClient implements Client {
                     } else {
                         currentResponseBuilder.header(entry.getKey(), valObject);
                     }
-                }
+                });
             }
         }
         String ct = (String)responseMessage.get(Message.CONTENT_TYPE);
@@ -482,7 +504,7 @@ public abstract class AbstractClient implements Client {
         @SuppressWarnings("unchecked")
         Class<T> theClass = (Class<T>)cls;
 
-        Object contentTypeHeader = headers.getFirst("Content-Type");
+        Object contentTypeHeader = headers.getFirst(HttpHeaders.CONTENT_TYPE);
         if (contentTypeHeader == null) {
             contentTypeHeader = MediaType.WILDCARD;
         }
@@ -563,13 +585,10 @@ public abstract class AbstractClient implements Client {
         s = (String)exchange.getOutMessage().get("transport.retransmit.url");
         if (s != null && !state.getBaseURI().toString().equals(s)) {
             calculateNewRequestURI(URI.create(s), getCurrentURI(), proxy);
-            return;
         }
-
     }
 
     protected Object[] preProcessResult(Message message) throws Exception {
-
         Exchange exchange = message.getExchange();
 
         Exception ex = message.getContent(Exception.class);
@@ -754,13 +773,12 @@ public abstract class AbstractClient implements Client {
             }
         } else {
             Object pValue = pValues[0];
-            MultivaluedMap<String, Object> values =
-                InjectionUtils.extractValuesFromBean(pValue, "");
-            for (Map.Entry<String, List<Object>> entry : values.entrySet()) {
-                for (Object v : entry.getValue()) {
-                    convertMatrixOrQueryToBuilder(ub, entry.getKey(), v, pt, anns);
-                }
-            }
+            MultivaluedMap<String, Object> values = InjectionUtils.extractValuesFromBean(pValue, "");
+            values.forEach((key, value) -> {
+                value.forEach(v -> {
+                    convertMatrixOrQueryToBuilder(ub, key, v, pt, anns);
+                });
+            });
         }
     }
 
@@ -835,17 +853,16 @@ public abstract class AbstractClient implements Client {
     }
 
     protected static void setAllHeaders(MultivaluedMap<String, String> headers, HttpURLConnection conn) {
-        for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
+        headers.forEach((key, value) -> {
             StringBuilder b = new StringBuilder();
-            for (int i = 0; i < entry.getValue().size(); i++) {
-                String value = entry.getValue().get(i);
-                b.append(value);
-                if (i + 1 < entry.getValue().size()) {
+            for (int i = 0; i < value.size(); i++) {
+                b.append(value.get(i));
+                if (i + 1 < value.size()) {
                     b.append(',');
                 }
             }
-            conn.setRequestProperty(entry.getKey(), b.toString());
-        }
+            conn.setRequestProperty(key, b.toString());
+        });
     }
 
     protected String[] parseQuotedHeaderValue(String originalValue) {
@@ -955,6 +972,8 @@ public abstract class AbstractClient implements Client {
 
     protected static MessageObserver setupInFaultObserver(final ClientConfiguration cfg) {
         return new InFaultChainInitiatorObserver(cfg.getBus()) {
+
+            @Override
             protected void initializeInterceptors(Exchange ex, PhaseInterceptorChain chain) {
                 chain.add(cfg.getInFaultInterceptors());
                 chain.add(new ConnectionFaultInterceptor());
@@ -1101,19 +1120,13 @@ public abstract class AbstractClient implements Client {
 
                 final ClientMessageObserver observer = new ClientMessageObserver(cfg);
 
-                exchange.put(MessageObserver.class, new MessageObserver() {
-                    public void onMessage(final Message message) {
-                        if (!message.getExchange()
-                            .containsKey(Executor.class.getName() + ".USING_SPECIFIED")) {
-
-                            executor.execute(new Runnable() {
-                                public void run() {
-                                    observer.onMessage(message);
-                                }
-                            });
-                        } else {
+                exchange.put(MessageObserver.class, message -> {
+                    if (!message.getExchange().containsKey(Executor.class.getName() + ".USING_SPECIFIED")) {
+                        executor.execute(() -> {
                             observer.onMessage(message);
-                        }
+                        });
+                    } else {
+                        observer.onMessage(message);
                     }
                 });
             }
@@ -1122,13 +1135,11 @@ public abstract class AbstractClient implements Client {
 
     protected void setContexts(Message message, Exchange exchange,
                                Map<String, Object> context, boolean proxy) {
-        Map<String, Object> reqContext = null;
-        Map<String, Object> resContext = null;
         if (context == null) {
             context = new HashMap<>();
         }
-        reqContext = CastUtils.cast((Map<?, ?>)context.get(REQUEST_CONTEXT));
-        resContext = CastUtils.cast((Map<?, ?>)context.get(RESPONSE_CONTEXT));
+        Map<String, Object> reqContext = CastUtils.cast((Map<?, ?>)context.get(REQUEST_CONTEXT));
+        Map<String, Object> resContext = CastUtils.cast((Map<?, ?>)context.get(RESPONSE_CONTEXT));
         if (reqContext == null) {
             reqContext = new HashMap<>(cfg.getRequestContext());
             context.put(REQUEST_CONTEXT, reqContext);
@@ -1209,8 +1220,8 @@ public abstract class AbstractClient implements Client {
             super(Phase.WRITE);
         }
 
+        @Override
         public void handleMessage(Message outMessage) throws Fault {
-
             MessageContentsList objs = MessageContentsList.getContentsList(outMessage);
             if (objs == null || objs.isEmpty()) {
                 return;
@@ -1239,6 +1250,7 @@ public abstract class AbstractClient implements Client {
 
     private class RetryableImpl implements Retryable {
 
+        @Override
         public Object[] invoke(BindingOperationInfo oi, Object[] params, Map<String, Object> context,
                                Exchange exchange) throws Exception {
             return AbstractClient.this.retryInvoke(oi, params, context, exchange);
@@ -1250,6 +1262,7 @@ public abstract class AbstractClient implements Client {
             super(Phase.PRE_STREAM);
         }
 
+        @Override
         public void handleMessage(Message message) throws Fault {
             if (!message.getExchange().isSynchronous()) {
                 Throwable ex = message.getContent(Exception.class);
@@ -1265,10 +1278,9 @@ public abstract class AbstractClient implements Client {
                     cb.handleException(message, ex);
                 }
             }
-
-
         }
     }
+
     protected abstract class AbstractClientAsyncResponseInterceptor extends AbstractPhaseInterceptor<Message> {
         AbstractClientAsyncResponseInterceptor() {
             super(Phase.UNMARSHAL);
diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
index 7993aae..2d31ae8 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProxyImpl.java
@@ -26,7 +26,6 @@ import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.net.URI;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -38,6 +37,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.logging.Logger;
+import java.util.stream.Collectors;
 
 import javax.ws.rs.BeanParam;
 import javax.ws.rs.CookieParam;
@@ -92,19 +92,19 @@ import org.apache.cxf.message.Message;
 public class ClientProxyImpl extends AbstractClient implements
     InvocationHandlerAware, InvocationHandler {
 
-    private static final Logger LOG = LogUtils.getL7dLogger(ClientProxyImpl.class);
-    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(ClientProxyImpl.class);
-    private static final String SLASH = "/";
-    private static final String BUFFER_PROXY_RESPONSE = "buffer.proxy.response";
-    private static final String PROXY_METHOD_PARAM_BODY_INDEX = "proxy.method.parameter.body.index";
-
-    private ClassResourceInfo cri;
-    private ClassLoader proxyLoader;
-    private boolean inheritHeaders;
-    private boolean isRoot;
-    private Map<String, Object> valuesMap = Collections.emptyMap();
-    private BodyWriter bodyWriter = new BodyWriter();
-    private Client proxy;
+    protected static final Logger LOG = LogUtils.getL7dLogger(ClientProxyImpl.class);
+    protected static final ResourceBundle BUNDLE = BundleUtils.getBundle(ClientProxyImpl.class);
+    protected static final String SLASH = "/";
+    protected static final String BUFFER_PROXY_RESPONSE = "buffer.proxy.response";
+    protected static final String PROXY_METHOD_PARAM_BODY_INDEX = "proxy.method.parameter.body.index";
+
+    protected ClassResourceInfo cri;
+    protected ClassLoader proxyLoader;
+    protected boolean inheritHeaders;
+    protected boolean isRoot;
+    protected Map<String, Object> valuesMap = Collections.emptyMap();
+    protected BodyWriter bodyWriter = new BodyWriter();
+    protected Client proxy;
     public ClientProxyImpl(URI baseURI,
                            ClassLoader loader,
                            ClassResourceInfo cri,
@@ -128,13 +128,15 @@ public class ClientProxyImpl extends AbstractClient implements
         initValuesMap(varValues);
         cfg.getInInterceptors().add(new ClientAsyncResponseInterceptor());
     }
+
     void setProxyClient(Client client) {
         this.proxy = client;
     }
+
     private void initValuesMap(Object... varValues) {
         if (isRoot) {
             List<String> vars = cri.getURITemplate().getVariables();
-            valuesMap = new LinkedHashMap<String, Object>();
+            valuesMap = new LinkedHashMap<>();
             for (int i = 0; i < vars.size(); i++) {
                 if (varValues.length > 0) {
                     if (i < varValues.length) {
@@ -158,6 +160,7 @@ public class ClientProxyImpl extends AbstractClient implements
      * method is invoked. Can throw an expected exception if ResponseExceptionMapper
      * is registered
      */
+    @Override
     public Object invoke(Object o, Method m, Object[] params) throws Throwable {
 
         Class<?> declaringClass = m.getDeclaringClass();
@@ -190,7 +193,7 @@ public class ClientProxyImpl extends AbstractClient implements
         URI uri = builder.buildFromEncoded(pathParams.toArray()).normalize();
 
         MultivaluedMap<String, String> headers = getHeaders();
-        MultivaluedMap<String, String> paramHeaders = new MetadataMap<String, String>();
+        MultivaluedMap<String, String> paramHeaders = new MetadataMap<>();
         handleHeaders(m, params, paramHeaders, beanParamsList, types);
         handleCookies(m, params, paramHeaders, beanParamsList, types);
 
@@ -239,16 +242,15 @@ public class ClientProxyImpl extends AbstractClient implements
 
     }
 
-    private void addNonEmptyPath(UriBuilder builder, String pathValue) {
+    protected void addNonEmptyPath(UriBuilder builder, String pathValue) {
         if (!SLASH.equals(pathValue)) {
             builder.path(pathValue);
         }
     }
 
-    private MultivaluedMap<ParameterType, Parameter> getParametersInfo(Method m,
+    protected MultivaluedMap<ParameterType, Parameter> getParametersInfo(Method m,
         Object[] params, OperationResourceInfo ori) {
-        MultivaluedMap<ParameterType, Parameter> map =
-            new MetadataMap<ParameterType, Parameter>();
+        MultivaluedMap<ParameterType, Parameter> map = new MetadataMap<>();
 
         List<Parameter> parameters = ori.getParameters();
         if (parameters.isEmpty()) {
@@ -288,7 +290,7 @@ public class ClientProxyImpl extends AbstractClient implements
             && m.getParameterTypes()[p.getIndex()] == AsyncResponse.class;
     }
 
-    private static int getBodyIndex(MultivaluedMap<ParameterType, Parameter> map,
+    protected static int getBodyIndex(MultivaluedMap<ParameterType, Parameter> map,
                                     OperationResourceInfo ori) {
         List<Parameter> list = map.get(ParameterType.REQUEST_BODY);
         int index = list == null || list.size() > 1 ? -1 : list.get(0).getIndex();
@@ -305,7 +307,7 @@ public class ClientProxyImpl extends AbstractClient implements
         if (status >= 300) {
             Class<?>[] exTypes = m.getExceptionTypes();
             if (exTypes.length == 0) {
-                exTypes = new Class[]{WebApplicationException.class};
+                exTypes = new Class<?>[]{WebApplicationException.class};
             }
             for (Class<?> exType : exTypes) {
                 ResponseExceptionMapper<?> mapper = findExceptionMapper(inMessage, exType);
@@ -340,12 +342,12 @@ public class ClientProxyImpl extends AbstractClient implements
         }
     }
 
-    private static ResponseExceptionMapper<?> findExceptionMapper(Message message, Class<?> exType) {
+    protected static ResponseExceptionMapper<?> findExceptionMapper(Message message, Class<?> exType) {
         ClientProviderFactory pf = ClientProviderFactory.getInstance(message);
         return pf.createResponseExceptionMapper(message, exType);
     }
 
-    private MultivaluedMap<String, String> setRequestHeaders(MultivaluedMap<String, String> headers,
+    protected MultivaluedMap<String, String> setRequestHeaders(MultivaluedMap<String, String> headers,
                                                              OperationResourceInfo ori,
                                                              boolean formParams,
                                                              Class<?> bodyClass,
@@ -387,35 +389,32 @@ public class ClientProxyImpl extends AbstractClient implements
         return headers;
     }
 
-    private List<MediaType> getAccept(MultivaluedMap<String, String> allHeaders) {
+    protected List<MediaType> getAccept(MultivaluedMap<String, String> allHeaders) {
         List<String> headers = allHeaders.get(HttpHeaders.ACCEPT);
         if (headers == null || headers.isEmpty()) {
             return null;
         }
-        List<MediaType> types = new ArrayList<>();
-        for (String s : headers) {
-            types.addAll(JAXRSUtils.parseMediaTypes(s));
-        }
-        return types;
+        return headers.stream().
+                flatMap(header -> JAXRSUtils.parseMediaTypes(header).stream()).collect(Collectors.toList());
     }
 
-    private List<Object> getPathParamValues(Method m,
+    protected List<Object> getPathParamValues(Method m,
                                             Object[] params,
                                             MultivaluedMap<ParameterType, Parameter> map,
                                             List<Parameter> beanParams,
                                             OperationResourceInfo ori,
                                             int bodyIndex) {
-        List<Object> list = new LinkedList<Object>();
+        List<Object> list = new LinkedList<>();
 
         List<String> methodVars = ori.getURITemplate().getVariables();
         List<Parameter> paramsList = getParameters(map, ParameterType.PATH);
         Map<String, BeanPair> beanParamValues = new HashMap<>(beanParams.size());
-        for (Parameter p : beanParams) {
+        beanParams.forEach(p -> {
             beanParamValues.putAll(getValuesFromBeanParam(params[p.getIndex()], PathParam.class));
-        }
+        });
         if (!beanParamValues.isEmpty() && !methodVars.containsAll(beanParamValues.keySet())) {
             List<String> classVars = ori.getClassResourceInfo().getURITemplate().getVariables();
-            for (String classVar : classVars) {
+            classVars.forEach(classVar -> {
                 BeanPair pair = beanParamValues.get(classVar);
                 if (pair != null) {
                     Object paramValue = convertParamValue(pair.getValue(), pair.getAnns());
@@ -425,46 +424,45 @@ public class ClientProxyImpl extends AbstractClient implements
                         list.add(paramValue);
                     }
                 }
-            }
+            });
         }
         if (isRoot) {
             list.addAll(valuesMap.values());
         }
 
 
-        Map<String, Parameter> paramsMap = new LinkedHashMap<String, Parameter>();
-        for (Parameter p : paramsList) {
+        Map<String, Parameter> paramsMap = new LinkedHashMap<>();
+        paramsList.forEach(p -> {
             if (p.getName().length() == 0) {
-                MultivaluedMap<String, Object> values =
-                    InjectionUtils.extractValuesFromBean(params[p.getIndex()], "");
-                for (String var : methodVars) {
+                MultivaluedMap<String, Object> values = InjectionUtils.extractValuesFromBean(params[p.getIndex()], "");
+                methodVars.forEach(var -> {
                     list.addAll(values.get(var));
-                }
+                });
             } else {
                 paramsMap.put(p.getName(), p);
             }
-        }
+        });
 
         Object requestBody = bodyIndex == -1 ? null : params[bodyIndex];
-        for (String varName : methodVars) {
+        methodVars.forEach(varName -> {
             Parameter p = paramsMap.remove(varName);
             if (p != null) {
                 list.add(convertParamValue(params[p.getIndex()],
-                                           m.getParameterTypes()[p.getIndex()],
-                                           getParamAnnotations(m, p)));
+                        m.getParameterTypes()[p.getIndex()],
+                        getParamAnnotations(m, p)));
             } else if (beanParamValues.containsKey(varName)) {
                 BeanPair pair = beanParamValues.get(varName);
                 list.add(convertParamValue(pair.getValue(), pair.getAnns()));
             } else if (requestBody != null) {
                 try {
-                    Method getter = requestBody.getClass().getMethod("get" + StringUtils.capitalize(varName),
-                                                                     new Class<?>[]{});
+                    Method getter = requestBody.getClass().
+                            getMethod("get" + StringUtils.capitalize(varName), new Class<?>[]{});
                     list.add(getter.invoke(requestBody, new Object[]{}));
                 } catch (Exception ex) {
                     // continue
                 }
             }
-        }
+        });
 
         for (Parameter p : paramsMap.values()) {
             if (valuesMap.containsKey(p.getName())) {
@@ -483,45 +481,46 @@ public class ClientProxyImpl extends AbstractClient implements
         return list;
     }
 
-    private static Annotation[] getParamAnnotations(Method m, Parameter p) {
+    protected static Annotation[] getParamAnnotations(Method m, Parameter p) {
         return m.getParameterAnnotations()[p.getIndex()];
     }
 
-    private static List<Parameter> getParameters(MultivaluedMap<ParameterType, Parameter> map,
+    protected static List<Parameter> getParameters(MultivaluedMap<ParameterType, Parameter> map,
                                            ParameterType key) {
         return map.get(key) == null ? Collections.emptyList() : map.get(key);
     }
 
-    private void handleQueries(Method m,
+    protected void handleQueries(Method m,
                                Object[] params,
                                MultivaluedMap<ParameterType, Parameter> map,
                                List<Parameter> beanParams,
                                UriBuilder ub) {
         List<Parameter> qs = getParameters(map, ParameterType.QUERY);
-        for (Parameter p : qs) {
-            if (params[p.getIndex()] != null) {
-                addMatrixQueryParamsToBuilder(ub, p.getName(), ParameterType.QUERY,
-                                              getParamAnnotations(m, p), params[p.getIndex()]);
-            }
-        }
-        for (Parameter p : beanParams) {
-            Map<String, BeanPair> values = getValuesFromBeanParam(params[p.getIndex()], QueryParam.class);
-            for (Map.Entry<String, BeanPair> entry : values.entrySet()) {
-                if (entry.getValue() != null) {
-                    addMatrixQueryParamsToBuilder(ub, entry.getKey(), ParameterType.QUERY,
-                                                  entry.getValue().getAnns(), entry.getValue().getValue());
-                }
-            }
-        }
+        qs.stream().
+                filter(p -> params[p.getIndex()] != null).
+                forEachOrdered(p -> {
+                    addMatrixQueryParamsToBuilder(ub, p.getName(), ParameterType.QUERY,
+                            getParamAnnotations(m, p), params[p.getIndex()]);
+                });
+        beanParams.stream().
+                map(p -> getValuesFromBeanParam(params[p.getIndex()], QueryParam.class)).
+                forEachOrdered(values -> {
+                    values.forEach((key, value) -> {
+                        if (value != null) {
+                            addMatrixQueryParamsToBuilder(ub, key, ParameterType.QUERY,
+                                    value.getAnns(), value.getValue());
+                        }
+                    });
+                });
     }
 
-    private Map<String, BeanPair> getValuesFromBeanParam(Object bean, Class<? extends Annotation> annClass) {
+    protected Map<String, BeanPair> getValuesFromBeanParam(Object bean, Class<? extends Annotation> annClass) {
         Map<String, BeanPair> values = new HashMap<>();
         getValuesFromBeanParam(bean, annClass, values);
         return values;
     }
 
-    private Map<String, BeanPair> getValuesFromBeanParam(Object bean,
+    protected Map<String, BeanPair> getValuesFromBeanParam(Object bean,
                                                          Class<? extends Annotation> annClass,
                                                          Map<String, BeanPair> values) {
         boolean completeFieldIntrospectionNeeded = false;
@@ -532,7 +531,7 @@ public class ClientProxyImpl extends AbstractClient implements
                     Annotation methodAnnotation = m.getAnnotation(annClass);
                     boolean beanParam = m.getAnnotation(BeanParam.class) != null;
                     if (methodAnnotation != null || beanParam) {
-                        Method getter = bean.getClass().getMethod("get" + propertyName, new Class[]{});
+                        Method getter = bean.getClass().getMethod("get" + propertyName, new Class<?>[]{});
                         Object value = getter.invoke(bean, new Object[]{});
                         if (value != null) {
                             if (methodAnnotation != null) {
@@ -576,7 +575,7 @@ public class ClientProxyImpl extends AbstractClient implements
         return values;
     }
 
-    private boolean getValuesFromBeanParamField(Object bean,
+    protected boolean getValuesFromBeanParamField(Object bean,
                                                 Field f,
                                                 Class<? extends Annotation> annClass,
                                                 Map<String, BeanPair> values) {
@@ -593,52 +592,53 @@ public class ClientProxyImpl extends AbstractClient implements
         return jaxrsParamAnnAvailable;
     }
 
-    private void handleMatrixes(Method m,
+    protected void handleMatrixes(Method m,
                                 Object[] params,
                                 MultivaluedMap<ParameterType, Parameter> map,
                                 List<Parameter> beanParams,
                                 UriBuilder ub) {
         List<Parameter> mx = getParameters(map, ParameterType.MATRIX);
-        for (Parameter p : mx) {
-            if (params[p.getIndex()] != null) {
-                addMatrixQueryParamsToBuilder(ub, p.getName(), ParameterType.MATRIX,
-                                              getParamAnnotations(m, p), params[p.getIndex()]);
-            }
-        }
-        for (Parameter p : beanParams) {
-            Map<String, BeanPair> values = getValuesFromBeanParam(params[p.getIndex()], MatrixParam.class);
-            for (Map.Entry<String, BeanPair> entry : values.entrySet()) {
-                if (entry.getValue() != null) {
-                    addMatrixQueryParamsToBuilder(ub, entry.getKey(), ParameterType.MATRIX,
-                                                  entry.getValue().getAnns(), entry.getValue().getValue());
-                }
-            }
-        }
+        mx.stream().
+                filter(p -> params[p.getIndex()] != null).
+                forEachOrdered(p -> {
+                    addMatrixQueryParamsToBuilder(ub, p.getName(), ParameterType.MATRIX,
+                            getParamAnnotations(m, p), params[p.getIndex()]);
+                });
+        beanParams.stream().
+                map(p -> getValuesFromBeanParam(params[p.getIndex()], MatrixParam.class)).
+                forEachOrdered(values -> {
+                    values.forEach((key, value) -> {
+                        if (value != null) {
+                            addMatrixQueryParamsToBuilder(ub, key, ParameterType.MATRIX,
+                                    value.getAnns(), value.getValue());
+                        }
+                    });
+                });
     }
 
-    private MultivaluedMap<String, String> handleForm(Method m,
+    protected MultivaluedMap<String, String> handleForm(Method m,
                                                       Object[] params,
                                                       MultivaluedMap<ParameterType, Parameter> map,
                                                       List<Parameter> beanParams) {
 
-        MultivaluedMap<String, String> form = new MetadataMap<String, String>();
+        MultivaluedMap<String, String> form = new MetadataMap<>();
 
         List<Parameter> fm = getParameters(map, ParameterType.FORM);
-        for (Parameter p : fm) {
+        fm.forEach(p -> {
             addFormValue(form, p.getName(), params[p.getIndex()], getParamAnnotations(m, p));
-        }
-        for (Parameter p : beanParams) {
-            Map<String, BeanPair> values = getValuesFromBeanParam(params[p.getIndex()], FormParam.class);
-            for (Map.Entry<String, BeanPair> entry : values.entrySet()) {
-                addFormValue(form, entry.getKey(), entry.getValue().getValue(), entry.getValue().getAnns());
-            }
-        }
+        });
+        beanParams.stream().
+                map(p -> getValuesFromBeanParam(params[p.getIndex()], FormParam.class)).
+                forEachOrdered(values -> {
+                    values.forEach((key, value) -> {
+                        addFormValue(form, key, value.getValue(), value.getAnns());
+                    });
+                });
 
         return form;
     }
 
-    private void addFormValue(MultivaluedMap<String, String> form, String name,
-                              Object pValue, Annotation[] anns) {
+    protected void addFormValue(MultivaluedMap<String, String> form, String name, Object pValue, Annotation[] anns) {
         if (pValue != null) {
             if (InjectionUtils.isSupportedCollectionOrArray(pValue.getClass())) {
                 Collection<?> c = pValue.getClass().isArray()
@@ -655,13 +655,13 @@ public class ClientProxyImpl extends AbstractClient implements
 
     }
 
-    private List<Attachment> handleMultipart(MultivaluedMap<ParameterType, Parameter> map,
+    protected List<Attachment> handleMultipart(MultivaluedMap<ParameterType, Parameter> map,
                                              OperationResourceInfo ori,
                                              Object[] params) {
 
-        List<Attachment> atts = new LinkedList<Attachment>();
+        List<Attachment> atts = new LinkedList<>();
         List<Parameter> fm = getParameters(map, ParameterType.REQUEST_BODY);
-        for (Parameter p : fm) {
+        fm.forEach(p -> {
             Multipart part = getMultipart(ori, p.getIndex());
             if (part != null) {
                 Object partObject = params[p.getIndex()];
@@ -669,65 +669,64 @@ public class ClientProxyImpl extends AbstractClient implements
                     atts.add(new Attachment(part.value(), part.type(), partObject));
                 }
             }
-        }
+        });
         return atts;
     }
 
-    private void handleHeaders(Method m,
+    protected void handleHeaders(Method m,
                                Object[] params,
                                MultivaluedMap<String, String> headers,
                                List<Parameter> beanParams,
                                MultivaluedMap<ParameterType, Parameter> map) {
         List<Parameter> hs = getParameters(map, ParameterType.HEADER);
-        for (Parameter p : hs) {
-            if (params[p.getIndex()] != null) {
-                headers.add(p.getName(), convertParamValue(params[p.getIndex()], getParamAnnotations(m, p)));
-            }
-        }
-        for (Parameter p : beanParams) {
-            Map<String, BeanPair> values = getValuesFromBeanParam(params[p.getIndex()], HeaderParam.class);
-            for (Map.Entry<String, BeanPair> entry : values.entrySet()) {
-                if (entry.getValue() != null) {
-                    headers.add(entry.getKey(),
-                                convertParamValue(entry.getValue().getValue(), entry.getValue().getAnns()));
-                }
-            }
-        }
+        hs.stream().
+                filter(p -> params[p.getIndex()] != null).
+                forEachOrdered(p -> {
+                    headers.add(p.getName(), convertParamValue(params[p.getIndex()], getParamAnnotations(m, p)));
+                });
+        beanParams.stream().
+                map(p -> getValuesFromBeanParam(params[p.getIndex()], HeaderParam.class)).
+                forEachOrdered(values -> {
+                    values.forEach((key, value) -> {
+                        if (value != null) {
+                            headers.add(key, convertParamValue(value.getValue(), value.getAnns()));
+                        }
+                    });
+                });
     }
 
-    private static Multipart getMultipart(OperationResourceInfo ori, int index) {
+    protected static Multipart getMultipart(OperationResourceInfo ori, int index) {
         Method aMethod = ori.getAnnotatedMethod();
         return aMethod != null ? AnnotationUtils.getAnnotation(
             aMethod.getParameterAnnotations()[index], Multipart.class) : null;
     }
 
-    private void handleCookies(Method m,
+    protected void handleCookies(Method m,
                                Object[] params,
                                MultivaluedMap<String, String> headers,
                                List<Parameter> beanParams,
                                MultivaluedMap<ParameterType, Parameter> map) {
         List<Parameter> cs = getParameters(map, ParameterType.COOKIE);
-        for (Parameter p : cs) {
-            if (params[p.getIndex()] != null) {
-                headers.add(HttpHeaders.COOKIE,
+        cs.stream().
+                filter(p -> params[p.getIndex()] != null).
+                forEachOrdered(p -> {
+                    headers.add(HttpHeaders.COOKIE,
                             p.getName() + '='
                             + convertParamValue(params[p.getIndex()].toString(), getParamAnnotations(m, p)));
-            }
-        }
-        for (Parameter p : beanParams) {
-            Map<String, BeanPair> values = getValuesFromBeanParam(params[p.getIndex()], CookieParam.class);
-            for (Map.Entry<String, BeanPair> entry : values.entrySet()) {
-                if (entry.getValue() != null) {
-                    headers.add(HttpHeaders.COOKIE,
-                                entry.getKey() + "="
-                                + convertParamValue(entry.getValue().getValue(),
-                                                    entry.getValue().getAnns()));
-                }
-            }
-        }
+                });
+        beanParams.stream().
+                map(p -> getValuesFromBeanParam(params[p.getIndex()], CookieParam.class)).
+                forEachOrdered(values -> {
+                    values.forEach((key, value) -> {
+                        if (value != null) {
+                            headers.add(HttpHeaders.COOKIE,
+                                    key + "=" + convertParamValue(value.getValue(), value.getAnns()));
+                        }
+                    });
+                });
     }
     //CHECKSTYLE:OFF
-    private Object doChainedInvocation(URI uri,
+    protected Object doChainedInvocation(URI uri,
                                        MultivaluedMap<String, String> headers,
                                        OperationResourceInfo ori,
                                        Object[] methodParams,
@@ -822,7 +821,7 @@ public class ClientProxyImpl extends AbstractClient implements
         return null;
     }
 
-    private InvocationCallback<Object> doCheckAsyncCallback(OperationResourceInfo ori,
+    protected InvocationCallback<Object> doCheckAsyncCallback(OperationResourceInfo ori,
                                                             InvocationCallback<Object> callback) {
         Type callbackOutType = getCallbackType(callback);
         Class<?> callbackRespClass = getCallbackClass(callbackOutType);
@@ -852,7 +851,7 @@ public class ClientProxyImpl extends AbstractClient implements
     protected JaxrsClientCallback<?> newJaxrsClientCallback(InvocationCallback<Object> asyncCallback,
                                                             Class<?> responseClass,
                                                             Type outGenericType) {
-        return new JaxrsClientCallback<Object>(asyncCallback, responseClass, outGenericType);
+        return new JaxrsClientCallback<>(asyncCallback, responseClass, outGenericType);
     }
 
     @Override
@@ -930,8 +929,9 @@ public class ClientProxyImpl extends AbstractClient implements
             : aMethod.getParameterAnnotations()[bodyIndex];
     }
 
-    private class BodyWriter extends AbstractBodyWriter {
+    protected class BodyWriter extends AbstractBodyWriter {
 
+        @Override
         protected void doWriteBody(Message outMessage,
                                    Object body,
                                    Type bodyType,
@@ -978,9 +978,9 @@ public class ClientProxyImpl extends AbstractClient implements
 
     }
 
-    private static class BeanPair {
-        private Object value;
-        private Annotation[] anns;
+    protected static class BeanPair {
+        protected Object value;
+        protected Annotation[] anns;
         BeanPair(Object value, Annotation[] anns) {
             this.value = value;
             this.anns = anns;
diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
index 47f2888..65ee66e 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/JAXRSClientFactoryBean.java
@@ -41,7 +41,6 @@ import org.apache.cxf.endpoint.ClientLifeCycleManager;
 import org.apache.cxf.endpoint.ConduitSelector;
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.endpoint.UpfrontConduitSelector;
-import org.apache.cxf.feature.Feature;
 import org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean;
 import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
 import org.apache.cxf.jaxrs.JAXRSServiceImpl;
@@ -53,17 +52,17 @@ import org.apache.cxf.service.factory.FactoryBeanListener;
 
 public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
 
-    private static final Logger LOG = LogUtils.getL7dLogger(JAXRSClientFactoryBean.class);
+    protected static final Logger LOG = LogUtils.getL7dLogger(JAXRSClientFactoryBean.class);
 
-    private String username;
-    private String password;
-    private boolean inheritHeaders;
-    private MultivaluedMap<String, String> headers;
-    private ClientState initialState;
-    private boolean threadSafe;
-    private long timeToKeepState;
-    private Class<?> serviceClass;
-    private ClassLoader proxyLoader;
+    protected String username;
+    protected String password;
+    protected boolean inheritHeaders;
+    protected MultivaluedMap<String, String> headers;
+    protected ClientState initialState;
+    protected boolean threadSafe;
+    protected long timeToKeepState;
+    protected Class<?> serviceClass;
+    protected ClassLoader proxyLoader;
 
     public JAXRSClientFactoryBean() {
         this(new JAXRSServiceFactoryBean());
@@ -172,7 +171,7 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
     }
 
     /**
-     * Returns the service class
+     * Returns the service class.
      */
     public Class<?> getServiceClass() {
         return serviceClass;
@@ -185,15 +184,15 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
      * @param map the headers
      */
     public void setHeaders(Map<String, String> map) {
-        headers = new MetadataMap<String, String>();
-        for (Map.Entry<String, String> entry : map.entrySet()) {
-            String[] values = entry.getValue().split(",");
+        headers = new MetadataMap<>();
+        map.forEach((key, value) -> {
+            String[] values = value.split(",");
             for (String v : values) {
                 if (v.length() != 0) {
-                    headers.add(entry.getKey(), v);
+                    headers.add(key, v);
                 }
             }
-        }
+        });
     }
 
     /**
@@ -235,14 +234,14 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
         }
     }
 
-    private void notifyLifecycleManager(Object client) {
+    protected void notifyLifecycleManager(Object client) {
         ClientLifeCycleManager mgr = bus.getExtension(ClientLifeCycleManager.class);
         if (null != mgr) {
             mgr.clientCreated(new FrontendClientAdapter(WebClient.getConfig(client)));
         }
     }
 
-    private ClientState getActualState() {
+    protected ClientState getActualState() {
         if (threadSafe) {
             initialState = new ThreadLocalClientState(getAddress(), timeToKeepState);
         }
@@ -254,7 +253,7 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
     }
 
     /**
-     * Creates a proxy
+     * Creates a proxy.
      * @param cls the proxy class
      * @param varValues optional list of values which will be used to substitute
      *        template variables specified in the class-level JAX-RS Path annotations
@@ -306,20 +305,14 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
             }
 
             boolean isRoot = cri.getURITemplate() != null;
-            ClientProxyImpl proxyImpl = null;
             ClientState actualState = getActualState();
-            proxyImpl = createClientProxy(cri, isRoot, actualState, varValues);
+            ClientProxyImpl proxyImpl = createClientProxy(cri, isRoot, actualState, varValues);
             initClient(proxyImpl, ep, actualState == null);
 
             final Class<?> serviceClassFinal = cri.getServiceClass();
-            ClassLoader theLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-
-                @Override
-                public ClassLoader run() {
-                    return proxyLoader == null ? serviceClassFinal.getClassLoader() : proxyLoader;
-                }
-            });
-            Class<?>[] ifaces = new Class[]{Client.class, InvocationHandlerAware.class, cri.getServiceClass()};
+            ClassLoader theLoader = AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () ->
+                    proxyLoader == null ? serviceClassFinal.getClassLoader() : proxyLoader);
+            Class<?>[] ifaces = new Class<?>[]{Client.class, InvocationHandlerAware.class, cri.getServiceClass()};
             Client actualClient = (Client)ProxyHelper.getProxy(theLoader, ifaces, proxyImpl);
             proxyImpl.setProxyClient(actualClient);
             notifyLifecycleManager(actualClient);
@@ -400,7 +393,7 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
                     if (cls == String.class
                         && AnnotationUtils.getAnnotation(anns, HeaderParam.class) == null
                         && AnnotationUtils.getAnnotation(anns, CookieParam.class) == null) {
-                        return (ParamConverter<T>)new UrlEncodingParamConverter(encodeClientParametersList);
+                        return (ParamConverter<T>) new UrlEncodingParamConverter(encodeClientParametersList);
                     }
                     return null;
                 }
@@ -411,9 +404,9 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
 
     protected void applyFeatures(AbstractClient client) {
         if (getFeatures() != null) {
-            for (Feature feature : getFeatures()) {
+            getFeatures().forEach(feature -> {
                 feature.initialize(client.getConfiguration(), getBus());
-            }
+            });
         }
     }
 
@@ -424,6 +417,4 @@ public class JAXRSClientFactoryBean extends AbstractJAXRSFactoryBean {
     public void setInitialState(ClientState initialState) {
         this.initialState = initialState;
     }
-
-
 }