This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/master by this push: new 1257719 private -> protected + some lambda goodness 1257719 is described below commit 1257719ba6030cb2e94a4cfcdfcf583a51a8817c Author: Francesco Chicchiriccò <ilgro...@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; } - - }