This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 463c0106985 Merging files that are being reformatted during 'mvn install' (#12516) 463c0106985 is described below commit 463c01069853a398f4da63deef120713bfa9a333 Author: Craig Ziesman <craig.zies...@gmail.com> AuthorDate: Wed Dec 20 23:20:33 2023 -0600 Merging files that are being reformatted during 'mvn install' (#12516) Co-authored-by: Craig Ziesman <czies...@redhat.com> --- .../camel/dataformat/csv/CsvRecordConverter.java | 2 +- .../component/cxf/jaxrs/DefaultCxfRsBinding.java | 550 ++++++++++----------- .../org/apache/camel/http/base/HttpHelper.java | 1 - .../transform/AvroPojoDataTypeTransformerTest.java | 4 +- .../jasypt/JasytPropertiesParserCustomAlgTest.java | 18 +- .../camel/component/kafka/KafkaComponent.java | 1 - .../messagehistory/MicrometerMessageHistory.java | 2 +- .../rest/openapi/WireMockJettyServerFactory.java | 15 +- .../camel/component/stream/StreamConsumer.java | 27 +- .../thrift/server/ThriftMethodHandler.java | 1 - .../component/vertx/http/VertxHttpEndpoint.java | 1 - etc/scripts/sign.sh | 5 +- .../NettyHttpClientChunkedResponseTest.java | 1 - 13 files changed, 312 insertions(+), 316 deletions(-) diff --git a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvRecordConverter.java b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvRecordConverter.java index 6f03d48da20..fad456ff62b 100644 --- a/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvRecordConverter.java +++ b/components/camel-csv/src/main/java/org/apache/camel/dataformat/csv/CsvRecordConverter.java @@ -32,7 +32,7 @@ public interface CsvRecordConverter<T> { * Converts the CSV record into another type. * * @param csvRecord CSV record to convert - * @return converted CSV record + * @return converted CSV record */ T convertRecord(CSVRecord csvRecord); } diff --git a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java index 35c977ce85a..2bf3e08af8f 100644 --- a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java +++ b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/DefaultCxfRsBinding.java @@ -18,12 +18,12 @@ package org.apache.camel.component.cxf.jaxrs; import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.List; import java.util.TreeMap; -import java.util.Arrays; import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.core.HttpHeaders; @@ -60,278 +60,278 @@ import org.slf4j.LoggerFactory; * Default strategy to bind between Camel and CXF exchange for RESTful resources. */ public class DefaultCxfRsBinding implements CxfRsBinding, HeaderFilterStrategyAware { - private static final Logger LOG = LoggerFactory.getLogger(DefaultCxfRsBinding.class); - - private HeaderFilterStrategy headerFilterStrategy; - - private String contentLanguage; - - public DefaultCxfRsBinding() { - } - - @Override - public Object populateCxfRsResponseFromExchange( - Exchange camelExchange, - org.apache.cxf.message.Exchange cxfExchange) - throws Exception { - // Need to check if the exchange has the exception - if (camelExchange.isFailed() && camelExchange.getException() != null) { - throw camelExchange.getException(); - } - - org.apache.camel.Message response; - if (camelExchange.getPattern().isOutCapable()) { - response = camelExchange.getMessage(); - } else { - response = camelExchange.getIn(); - LOG.trace("Get the response from the in message"); - } - - Object o = response.getBody(); - if (!(o instanceof Response)) { - //not a JAX-RS Response object, we need to set the headers from the Camel values - - if (response.getHeader(CxfConstants.PROTOCOL_HEADERS) != null) { - Map<String, Object> headers - = CastUtils.cast((Map<?, ?>) response.getHeader(CxfConstants.PROTOCOL_HEADERS)); - if (!ObjectHelper.isEmpty(cxfExchange) && !ObjectHelper.isEmpty(cxfExchange.getOutMessage())) { - cxfExchange.getOutMessage().putIfAbsent(CxfConstants.PROTOCOL_HEADERS, - new TreeMap<>(String.CASE_INSENSITIVE_ORDER)); - } - final Map<String, List<String>> cxfHeaders = CastUtils - .cast((Map<?, ?>) cxfExchange.getOutMessage().get(CxfConstants.PROTOCOL_HEADERS)); - - for (Map.Entry<String, Object> ent : headers.entrySet()) { - List<String> v; - if (ent.getValue() instanceof List) { - v = CastUtils.cast((List<?>) ent.getValue()); - } else { - v = Arrays.asList(ent.getValue().toString()); - } - cxfHeaders.put(ent.getKey(), v); - } - } - - if (response.getHeader(CxfConstants.HTTP_RESPONSE_CODE) != null - && !cxfExchange.containsKey(org.apache.cxf.message.Message.RESPONSE_CODE)) { - cxfExchange.put(org.apache.cxf.message.Message.RESPONSE_CODE, - response.getHeader(CxfConstants.HTTP_RESPONSE_CODE, Integer.class)); - } - if (response.getHeader(CxfConstants.CONTENT_TYPE) != null - && !cxfExchange.containsKey(org.apache.cxf.message.Message.CONTENT_TYPE)) { - if (!ObjectHelper.isEmpty(cxfExchange) && !ObjectHelper.isEmpty(cxfExchange.getOutMessage())) { - cxfExchange.getOutMessage().putIfAbsent(CxfConstants.PROTOCOL_HEADERS, - new TreeMap<>(String.CASE_INSENSITIVE_ORDER)); - } - final Map<String, List<String>> cxfHeaders = CastUtils - .cast((Map<?, ?>) cxfExchange.getOutMessage().get(CxfConstants.PROTOCOL_HEADERS)); - - if (!cxfHeaders.containsKey(CxfConstants.CONTENT_TYPE)) { - List<String> a = Arrays.asList((String) response.getHeader(CxfConstants.CONTENT_TYPE)); - cxfHeaders.put(CxfConstants.CONTENT_TYPE, a); - cxfExchange.getOutMessage().put(CxfConstants.CONTENT_TYPE, response.getHeader(CxfConstants.CONTENT_TYPE)); - } - } - } - return o; - } - - @Override - public void populateExchangeFromCxfRsRequest( - org.apache.cxf.message.Exchange cxfExchange, - Exchange camelExchange, Method method, Object[] paramArray) { - Message camelMessage = camelExchange.getIn(); - //Copy the CXF message header into the Camel inMessage - org.apache.cxf.message.Message cxfMessage = cxfExchange.getInMessage(); - - CxfHeaderHelper.copyHttpHeadersFromCxfToCamel(headerFilterStrategy, cxfMessage, camelMessage, camelExchange); - - // TODO move to CxfHeaderHelper and use header filter strategy and CXF_TO_CAMEL_HEADERS - // setup the charset from content-type header - setCharsetWithContentType(camelExchange); - - //copy the protocol header - copyProtocolHeader(cxfMessage, camelMessage, camelMessage.getExchange()); - - camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, method.getReturnType()); - - camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_GENERIC_TYPE, method.getGenericReturnType()); - - copyOperationResourceInfoStack(cxfMessage, camelMessage); - - camelMessage.setHeader(CxfConstants.OPERATION_NAME, method.getName()); - - camelMessage.setHeader(CxfConstants.CAMEL_CXF_MESSAGE, cxfMessage); - - camelMessage.setBody(new MessageContentsList(paramArray)); - - // propagate the security subject from CXF security context - SecurityContext securityContext = cxfMessage.get(SecurityContext.class); - if (securityContext instanceof LoginSecurityContext - && ((LoginSecurityContext) securityContext).getSubject() != null) { - camelExchange.getIn().getHeaders().put(CxfConstants.AUTHENTICATION, - ((LoginSecurityContext) securityContext).getSubject()); - } else if (securityContext != null && securityContext.getUserPrincipal() != null) { - Subject subject = new Subject(); - subject.getPrincipals().add(securityContext.getUserPrincipal()); - camelExchange.getIn().getHeaders().put(CxfConstants.AUTHENTICATION, subject); - } - } - - protected void setCharsetWithContentType(Exchange camelExchange) { - // setup the charset from content-type header - String contentTypeHeader = ExchangeHelper.getContentType(camelExchange); - if (contentTypeHeader != null) { - String charset = HttpHeaderHelper.findCharset(contentTypeHeader); - String normalizedEncoding = HttpHeaderHelper.mapCharset(charset, StandardCharsets.UTF_8.name()); - if (normalizedEncoding != null) { - camelExchange.setProperty(ExchangePropertyKey.CHARSET_NAME, normalizedEncoding); - } - } - } - - @Override - public MultivaluedMap<String, String> bindCamelHeadersToRequestHeaders( - Map<String, Object> camelHeaders, - Exchange camelExchange) - throws Exception { - - MultivaluedMap<String, String> answer = new MetadataMap<>(); - CxfHeaderHelper.propagateCamelHeadersToCxfHeaders(headerFilterStrategy, camelHeaders, answer, camelExchange); - return answer; - } - - /** - * This method call Message.getBody({@link MessageContentsList}) to allow an appropriate converter to kick in even - * through we only read the first element off the MessageContextList. If that returns null, we check the body to see - * if it is a List or an array and then return the first element. If that fails, we will simply return the object. - */ - @Override - public Object bindCamelMessageBodyToRequestBody(Message camelMessage, Exchange camelExchange) - throws Exception { - - Object request = camelMessage.getBody(MessageContentsList.class); - if (request instanceof MessageContentsList mcl) { - return mcl.get(0); - } - - request = camelMessage.getBody(); - if (request instanceof List) { - request = ((List<?>) request).get(0); - } else if (request instanceof byte[] byteArray) { - return byteArray; - } else if (request != null && request.getClass().isArray()) { - request = ((Object[]) request)[0]; - } - - return request; - } - - /** - * We will return an empty Map unless the response parameter is a {@link Response} object. - */ - @Override - public Map<String, Object> bindResponseHeadersToCamelHeaders(Object response, Exchange camelExchange) - throws Exception { - - Map<String, Object> answer = new HashMap<>(); - if (response instanceof Response) { - Map<String, List<Object>> responseHeaders = ((Response) response).getMetadata(); - CxfHeaderHelper.propagateCxfHeadersToCamelHeaders(headerFilterStrategy, responseHeaders, answer, camelExchange); - } - - return answer; - } - - @Override - public Entity<Object> bindCamelMessageToRequestEntity(Object body, Message camelMessage, Exchange camelExchange) - throws Exception { - return bindCamelMessageToRequestEntity(body, camelMessage, camelExchange, null); - } - - @Override - public Entity<Object> bindCamelMessageToRequestEntity( - Object body, Message camelMessage, Exchange camelExchange, - WebClient webClient) - throws Exception { - if (body == null) { - return null; - } - String contentType = camelMessage.getHeader(CxfConstants.CONTENT_TYPE, String.class); - if (contentType == null) { - contentType = MediaType.WILDCARD; - } - String contentEncoding = camelMessage.getHeader(CxfConstants.CONTENT_ENCODING, String.class); - if (webClient != null && contentLanguage == null) { - try { - Method getStateMethod = AbstractClient.class.getDeclaredMethod("getState"); - getStateMethod.setAccessible(true); - ClientState clientState = (ClientState) getStateMethod.invoke(webClient); - if (clientState.getRequestHeaders().containsKey(HttpHeaders.CONTENT_LANGUAGE)) { - contentLanguage = clientState.getRequestHeaders() - .getFirst(HttpHeaders.CONTENT_LANGUAGE); - if (contentLanguage != null) { - return Entity.entity(body, new Variant( - MediaType.valueOf(contentType), - new Locale(contentLanguage), contentEncoding)); - } - } - } catch (Exception ex) { - LOG.warn( - "Cannot retrieve CONTENT_LANGUAGE from WebClient. This exception is ignored, and US Locale will be used", - ex); - } - } - contentLanguage = Locale.US.getLanguage(); - return Entity.entity(body, new Variant(MediaType.valueOf(contentType), Locale.US, contentEncoding)); - } - - /** - * By default, we just return the response object. - */ - @Override - public Object bindResponseToCamelBody(Object response, Exchange camelExchange) throws Exception { - return response; - } - - @Override - public HeaderFilterStrategy getHeaderFilterStrategy() { - return headerFilterStrategy; - } - - @Override - public void setHeaderFilterStrategy(HeaderFilterStrategy strategy) { - headerFilterStrategy = strategy; - } - - @SuppressWarnings("unchecked") - protected void copyProtocolHeader(org.apache.cxf.message.Message cxfMessage, Message camelMessage, Exchange camelExchange) { - Map<String, List<String>> headers - = (Map<String, List<String>>) cxfMessage.get(CxfConstants.PROTOCOL_HEADERS); - for (Map.Entry<String, List<String>> entry : headers.entrySet()) { - // just make sure the first String element is not null - if (headerFilterStrategy.applyFilterToExternalHeaders(entry.getKey(), entry.getValue(), camelExchange) - || entry.getValue().isEmpty()) { - LOG.trace("Drop CXF message protocol header: {}={}", entry.getKey(), entry.getValue()); - } else if (entry.getKey().startsWith(":")) { - /* Ignore HTTP/2 pseudo headers such as :status */ - continue; - } else { - // just put the first String element, as the complex one is filtered - camelMessage.setHeader(entry.getKey(), entry.getValue().get(0)); - } - continue; - } - } - - protected void copyOperationResourceInfoStack(org.apache.cxf.message.Message cxfMessage, Message camelMessage) { - OperationResourceInfoStack stack = cxfMessage.get(OperationResourceInfoStack.class); - if (stack != null) { - // make a copy of the operation resource info for looking up the sub resource location - OperationResourceInfoStack copyStack = (OperationResourceInfoStack) stack.clone(); - camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_OPERATION_RESOURCE_INFO_STACK, copyStack); - - } - } + private static final Logger LOG = LoggerFactory.getLogger(DefaultCxfRsBinding.class); + + private HeaderFilterStrategy headerFilterStrategy; + + private String contentLanguage; + + public DefaultCxfRsBinding() { + } + + @Override + public Object populateCxfRsResponseFromExchange( + Exchange camelExchange, + org.apache.cxf.message.Exchange cxfExchange) + throws Exception { + // Need to check if the exchange has the exception + if (camelExchange.isFailed() && camelExchange.getException() != null) { + throw camelExchange.getException(); + } + + org.apache.camel.Message response; + if (camelExchange.getPattern().isOutCapable()) { + response = camelExchange.getMessage(); + } else { + response = camelExchange.getIn(); + LOG.trace("Get the response from the in message"); + } + + Object o = response.getBody(); + if (!(o instanceof Response)) { + //not a JAX-RS Response object, we need to set the headers from the Camel values + + if (response.getHeader(CxfConstants.PROTOCOL_HEADERS) != null) { + Map<String, Object> headers + = CastUtils.cast((Map<?, ?>) response.getHeader(CxfConstants.PROTOCOL_HEADERS)); + if (!ObjectHelper.isEmpty(cxfExchange) && !ObjectHelper.isEmpty(cxfExchange.getOutMessage())) { + cxfExchange.getOutMessage().putIfAbsent(CxfConstants.PROTOCOL_HEADERS, + new TreeMap<>(String.CASE_INSENSITIVE_ORDER)); + } + final Map<String, List<String>> cxfHeaders = CastUtils + .cast((Map<?, ?>) cxfExchange.getOutMessage().get(CxfConstants.PROTOCOL_HEADERS)); + + for (Map.Entry<String, Object> ent : headers.entrySet()) { + List<String> v; + if (ent.getValue() instanceof List) { + v = CastUtils.cast((List<?>) ent.getValue()); + } else { + v = Arrays.asList(ent.getValue().toString()); + } + cxfHeaders.put(ent.getKey(), v); + } + } + + if (response.getHeader(CxfConstants.HTTP_RESPONSE_CODE) != null + && !cxfExchange.containsKey(org.apache.cxf.message.Message.RESPONSE_CODE)) { + cxfExchange.put(org.apache.cxf.message.Message.RESPONSE_CODE, + response.getHeader(CxfConstants.HTTP_RESPONSE_CODE, Integer.class)); + } + if (response.getHeader(CxfConstants.CONTENT_TYPE) != null + && !cxfExchange.containsKey(org.apache.cxf.message.Message.CONTENT_TYPE)) { + if (!ObjectHelper.isEmpty(cxfExchange) && !ObjectHelper.isEmpty(cxfExchange.getOutMessage())) { + cxfExchange.getOutMessage().putIfAbsent(CxfConstants.PROTOCOL_HEADERS, + new TreeMap<>(String.CASE_INSENSITIVE_ORDER)); + } + final Map<String, List<String>> cxfHeaders = CastUtils + .cast((Map<?, ?>) cxfExchange.getOutMessage().get(CxfConstants.PROTOCOL_HEADERS)); + + if (!cxfHeaders.containsKey(CxfConstants.CONTENT_TYPE)) { + List<String> a = Arrays.asList((String) response.getHeader(CxfConstants.CONTENT_TYPE)); + cxfHeaders.put(CxfConstants.CONTENT_TYPE, a); + cxfExchange.getOutMessage().put(CxfConstants.CONTENT_TYPE, response.getHeader(CxfConstants.CONTENT_TYPE)); + } + } + } + return o; + } + + @Override + public void populateExchangeFromCxfRsRequest( + org.apache.cxf.message.Exchange cxfExchange, + Exchange camelExchange, Method method, Object[] paramArray) { + Message camelMessage = camelExchange.getIn(); + //Copy the CXF message header into the Camel inMessage + org.apache.cxf.message.Message cxfMessage = cxfExchange.getInMessage(); + + CxfHeaderHelper.copyHttpHeadersFromCxfToCamel(headerFilterStrategy, cxfMessage, camelMessage, camelExchange); + + // TODO move to CxfHeaderHelper and use header filter strategy and CXF_TO_CAMEL_HEADERS + // setup the charset from content-type header + setCharsetWithContentType(camelExchange); + + //copy the protocol header + copyProtocolHeader(cxfMessage, camelMessage, camelMessage.getExchange()); + + camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, method.getReturnType()); + + camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_GENERIC_TYPE, method.getGenericReturnType()); + + copyOperationResourceInfoStack(cxfMessage, camelMessage); + + camelMessage.setHeader(CxfConstants.OPERATION_NAME, method.getName()); + + camelMessage.setHeader(CxfConstants.CAMEL_CXF_MESSAGE, cxfMessage); + + camelMessage.setBody(new MessageContentsList(paramArray)); + + // propagate the security subject from CXF security context + SecurityContext securityContext = cxfMessage.get(SecurityContext.class); + if (securityContext instanceof LoginSecurityContext + && ((LoginSecurityContext) securityContext).getSubject() != null) { + camelExchange.getIn().getHeaders().put(CxfConstants.AUTHENTICATION, + ((LoginSecurityContext) securityContext).getSubject()); + } else if (securityContext != null && securityContext.getUserPrincipal() != null) { + Subject subject = new Subject(); + subject.getPrincipals().add(securityContext.getUserPrincipal()); + camelExchange.getIn().getHeaders().put(CxfConstants.AUTHENTICATION, subject); + } + } + + protected void setCharsetWithContentType(Exchange camelExchange) { + // setup the charset from content-type header + String contentTypeHeader = ExchangeHelper.getContentType(camelExchange); + if (contentTypeHeader != null) { + String charset = HttpHeaderHelper.findCharset(contentTypeHeader); + String normalizedEncoding = HttpHeaderHelper.mapCharset(charset, StandardCharsets.UTF_8.name()); + if (normalizedEncoding != null) { + camelExchange.setProperty(ExchangePropertyKey.CHARSET_NAME, normalizedEncoding); + } + } + } + + @Override + public MultivaluedMap<String, String> bindCamelHeadersToRequestHeaders( + Map<String, Object> camelHeaders, + Exchange camelExchange) + throws Exception { + + MultivaluedMap<String, String> answer = new MetadataMap<>(); + CxfHeaderHelper.propagateCamelHeadersToCxfHeaders(headerFilterStrategy, camelHeaders, answer, camelExchange); + return answer; + } + + /** + * This method call Message.getBody({@link MessageContentsList}) to allow an appropriate converter to kick in even + * through we only read the first element off the MessageContextList. If that returns null, we check the body to see + * if it is a List or an array and then return the first element. If that fails, we will simply return the object. + */ + @Override + public Object bindCamelMessageBodyToRequestBody(Message camelMessage, Exchange camelExchange) + throws Exception { + + Object request = camelMessage.getBody(MessageContentsList.class); + if (request instanceof MessageContentsList mcl) { + return mcl.get(0); + } + + request = camelMessage.getBody(); + if (request instanceof List) { + request = ((List<?>) request).get(0); + } else if (request instanceof byte[] byteArray) { + return byteArray; + } else if (request != null && request.getClass().isArray()) { + request = ((Object[]) request)[0]; + } + + return request; + } + + /** + * We will return an empty Map unless the response parameter is a {@link Response} object. + */ + @Override + public Map<String, Object> bindResponseHeadersToCamelHeaders(Object response, Exchange camelExchange) + throws Exception { + + Map<String, Object> answer = new HashMap<>(); + if (response instanceof Response) { + Map<String, List<Object>> responseHeaders = ((Response) response).getMetadata(); + CxfHeaderHelper.propagateCxfHeadersToCamelHeaders(headerFilterStrategy, responseHeaders, answer, camelExchange); + } + + return answer; + } + + @Override + public Entity<Object> bindCamelMessageToRequestEntity(Object body, Message camelMessage, Exchange camelExchange) + throws Exception { + return bindCamelMessageToRequestEntity(body, camelMessage, camelExchange, null); + } + + @Override + public Entity<Object> bindCamelMessageToRequestEntity( + Object body, Message camelMessage, Exchange camelExchange, + WebClient webClient) + throws Exception { + if (body == null) { + return null; + } + String contentType = camelMessage.getHeader(CxfConstants.CONTENT_TYPE, String.class); + if (contentType == null) { + contentType = MediaType.WILDCARD; + } + String contentEncoding = camelMessage.getHeader(CxfConstants.CONTENT_ENCODING, String.class); + if (webClient != null && contentLanguage == null) { + try { + Method getStateMethod = AbstractClient.class.getDeclaredMethod("getState"); + getStateMethod.setAccessible(true); + ClientState clientState = (ClientState) getStateMethod.invoke(webClient); + if (clientState.getRequestHeaders().containsKey(HttpHeaders.CONTENT_LANGUAGE)) { + contentLanguage = clientState.getRequestHeaders() + .getFirst(HttpHeaders.CONTENT_LANGUAGE); + if (contentLanguage != null) { + return Entity.entity(body, new Variant( + MediaType.valueOf(contentType), + new Locale(contentLanguage), contentEncoding)); + } + } + } catch (Exception ex) { + LOG.warn( + "Cannot retrieve CONTENT_LANGUAGE from WebClient. This exception is ignored, and US Locale will be used", + ex); + } + } + contentLanguage = Locale.US.getLanguage(); + return Entity.entity(body, new Variant(MediaType.valueOf(contentType), Locale.US, contentEncoding)); + } + + /** + * By default, we just return the response object. + */ + @Override + public Object bindResponseToCamelBody(Object response, Exchange camelExchange) throws Exception { + return response; + } + + @Override + public HeaderFilterStrategy getHeaderFilterStrategy() { + return headerFilterStrategy; + } + + @Override + public void setHeaderFilterStrategy(HeaderFilterStrategy strategy) { + headerFilterStrategy = strategy; + } + + @SuppressWarnings("unchecked") + protected void copyProtocolHeader(org.apache.cxf.message.Message cxfMessage, Message camelMessage, Exchange camelExchange) { + Map<String, List<String>> headers + = (Map<String, List<String>>) cxfMessage.get(CxfConstants.PROTOCOL_HEADERS); + for (Map.Entry<String, List<String>> entry : headers.entrySet()) { + // just make sure the first String element is not null + if (headerFilterStrategy.applyFilterToExternalHeaders(entry.getKey(), entry.getValue(), camelExchange) + || entry.getValue().isEmpty()) { + LOG.trace("Drop CXF message protocol header: {}={}", entry.getKey(), entry.getValue()); + } else if (entry.getKey().startsWith(":")) { + /* Ignore HTTP/2 pseudo headers such as :status */ + continue; + } else { + // just put the first String element, as the complex one is filtered + camelMessage.setHeader(entry.getKey(), entry.getValue().get(0)); + } + continue; + } + } + + protected void copyOperationResourceInfoStack(org.apache.cxf.message.Message cxfMessage, Message camelMessage) { + OperationResourceInfoStack stack = cxfMessage.get(OperationResourceInfoStack.class); + if (stack != null) { + // make a copy of the operation resource info for looking up the sub resource location + OperationResourceInfoStack copyStack = (OperationResourceInfoStack) stack.clone(); + camelMessage.setHeader(CxfConstants.CAMEL_CXF_RS_OPERATION_RESOURCE_INFO_STACK, copyStack); + + } + } } diff --git a/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpHelper.java b/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpHelper.java index 197931bbd54..1a9198796eb 100644 --- a/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpHelper.java +++ b/components/camel-http-base/src/main/java/org/apache/camel/http/base/HttpHelper.java @@ -28,7 +28,6 @@ import org.apache.camel.support.http.HttpUtil; import org.apache.camel.util.CollectionHelper; import org.apache.camel.util.IOHelper; import org.apache.camel.util.ObjectHelper; -import org.apache.camel.util.StringHelper; public final class HttpHelper { diff --git a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformerTest.java b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformerTest.java index 31b77c9327c..09c8be85509 100644 --- a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformerTest.java +++ b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformerTest.java @@ -100,8 +100,8 @@ class AvroPojoDataTypeTransformerTest { exchange.getMessage() .setBody(Avro.mapper().writerFor(JsonNode.class).with(avroSchema) .writeValueAsBytes(Json.mapper().readTree(""" - { "name": "Goofy", "age": 25 } - """))); + { "name": "Goofy", "age": 25 } + """))); transformer.transform(exchange.getMessage(), DataType.ANY, DataType.ANY); Assertions.assertEquals(Person.class, exchange.getMessage().getBody().getClass()); diff --git a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasytPropertiesParserCustomAlgTest.java b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasytPropertiesParserCustomAlgTest.java index aa050eb0f54..38d211192c1 100644 --- a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasytPropertiesParserCustomAlgTest.java +++ b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasytPropertiesParserCustomAlgTest.java @@ -22,19 +22,19 @@ import org.junit.jupiter.api.BeforeEach; public class JasytPropertiesParserCustomAlgTest extends JasyptPropertiesParserTest { - @BeforeEach - public void before() { - knowDecrypted = "tigertigertiger"; - knownEncrypted = "ENC(LuCBTHaY1G6XHRwp63teshi/LbFRzpPtq5j8SNpJgv1yn9D25py+xHNGjXEMnf/J)"; + @BeforeEach + public void before() { + knowDecrypted = "tigertigertiger"; + knownEncrypted = "ENC(LuCBTHaY1G6XHRwp63teshi/LbFRzpPtq5j8SNpJgv1yn9D25py+xHNGjXEMnf/J)"; encryptor.setAlgorithm("PBEWithHmacSHA256AndAES_256"); - encryptor.setSaltGenerator(new RandomSaltGenerator("SHA1PRNG")); + encryptor.setSaltGenerator(new RandomSaltGenerator("SHA1PRNG")); encryptor.setIvGenerator(new RandomIvGenerator("SHA1PRNG")); - encryptor.setPassword(knownPassword); + encryptor.setPassword(knownPassword); jasyptPropertiesParser.setAlgorithm("PBEWithHmacSHA256AndAES_256"); - jasyptPropertiesParser.setRandomSaltGeneratorAlgorithm("SHA1PRNG"); + jasyptPropertiesParser.setRandomSaltGeneratorAlgorithm("SHA1PRNG"); jasyptPropertiesParser.setRandomIvGeneratorAlgorithm("SHA1PRNG"); - jasyptPropertiesParser.setEncryptor(encryptor); - } + jasyptPropertiesParser.setEncryptor(encryptor); + } } diff --git a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaComponent.java b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaComponent.java index 387321a78a2..5b0323d0e53 100644 --- a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaComponent.java +++ b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaComponent.java @@ -20,7 +20,6 @@ import java.util.HashMap; import java.util.Map; import org.apache.camel.CamelContext; -import org.apache.camel.RuntimeCamelException; import org.apache.camel.SSLContextParametersAware; import org.apache.camel.component.kafka.consumer.KafkaManualCommit; import org.apache.camel.component.kafka.consumer.KafkaManualCommitFactory; diff --git a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java index 4a6ddd517ea..93aafed3b62 100644 --- a/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java +++ b/components/camel-micrometer/src/main/java/org/apache/camel/component/micrometer/messagehistory/MicrometerMessageHistory.java @@ -46,7 +46,7 @@ public class MicrometerMessageHistory extends DefaultMessageHistory { } public MicrometerMessageHistory(MeterRegistry meterRegistry, Route route, NamedNode namedNode, - MicrometerMessageHistoryNamingStrategy namingStrategy, Message message) { + MicrometerMessageHistoryNamingStrategy namingStrategy, Message message) { super(route.getId(), namedNode, System.currentTimeMillis(), message); this.meterRegistry = meterRegistry; this.route = route; diff --git a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/WireMockJettyServerFactory.java b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/WireMockJettyServerFactory.java index 7a5c4c25dc3..182028aeb00 100644 --- a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/WireMockJettyServerFactory.java +++ b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/WireMockJettyServerFactory.java @@ -46,9 +46,10 @@ public final class WireMockJettyServerFactory extends JettyHttpServerFactory { return new Jetty11HttpServer(options, adminRequestHandler, stubRequestHandler) { @Override - protected ServerConnector createHttpsConnector(String bindAddress, HttpsSettings httpsSettings, JettySettings jettySettings, NetworkTrafficListener listener) { - SslContextFactory.Server http2SslContextFactory = - SslContexts.buildHttp2SslContextFactory(httpsSettings); + protected ServerConnector createHttpsConnector( + String bindAddress, HttpsSettings httpsSettings, JettySettings jettySettings, + NetworkTrafficListener listener) { + SslContextFactory.Server http2SslContextFactory = SslContexts.buildHttp2SslContextFactory(httpsSettings); http2SslContextFactory.setIncludeCipherSuites("TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"); http2SslContextFactory.setProtocol("TLSv1.3"); @@ -65,14 +66,12 @@ public final class WireMockJettyServerFactory extends JettyHttpServerFactory { HttpConnectionFactory http = new HttpConnectionFactory(httpConfig); - SslConnectionFactory ssl = - new SslConnectionFactory(http2SslContextFactory, http.getProtocol()); + SslConnectionFactory ssl = new SslConnectionFactory(http2SslContextFactory, http.getProtocol()); int acceptors = jettySettings.getAcceptors().orElse(3); - NetworkTrafficServerConnector connector = - new NetworkTrafficServerConnector( - jettyServer, null, null, null, acceptors, 2, ssl, http); + NetworkTrafficServerConnector connector = new NetworkTrafficServerConnector( + jettyServer, null, null, null, acceptors, 2, ssl, http); connector.setPort(httpsSettings.port()); connector.setNetworkTrafficListener(listener); diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java index 5e712a9a589..0c766e1b400 100644 --- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java +++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConsumer.java @@ -432,18 +432,19 @@ public class StreamConsumer extends DefaultConsumer implements Runnable { return fileStream; } - /** - * From a comma-separated list of headers in the format of "FIELD=VALUE" or "FIELD:VALUE", split on the commas - * and split on the separator to create a stream of Map.Entry values while filtering out invalid combinations - * @param headerList A string containing a comma-separated list of headers - * @return A Stream of Map.Entry items which can then be added as headers to a URLConnection - */ - Stream<Map.Entry<String,String>> parseHeaders(String headerList) { - return Arrays.asList(headerList.split(",")) - .stream() - .map(s -> s.split("[=:]")) - .filter(h -> h.length == 2) - .map(h -> Map.entry(h[0].trim(), h[1].trim())); + /** + * From a comma-separated list of headers in the format of "FIELD=VALUE" or "FIELD:VALUE", split on the commas and + * split on the separator to create a stream of Map.Entry values while filtering out invalid combinations + * + * @param headerList A string containing a comma-separated list of headers + * @return A Stream of Map.Entry items which can then be added as headers to a URLConnection + */ + Stream<Map.Entry<String, String>> parseHeaders(String headerList) { + return Arrays.asList(headerList.split(",")) + .stream() + .map(s -> s.split("[=:]")) + .filter(h -> h.length == 2) + .map(h -> Map.entry(h[0].trim(), h[1].trim())); } private InputStream resolveStreamFromUrl() throws IOException { @@ -455,7 +456,7 @@ public class StreamConsumer extends DefaultConsumer implements Runnable { String headers = endpoint.getHttpHeaders(); if (headers != null) { parseHeaders(headers) - .forEach(e -> urlConnectionToClose.setRequestProperty(e.getKey(), e.getValue())); + .forEach(e -> urlConnectionToClose.setRequestProperty(e.getKey(), e.getValue())); } InputStream is; diff --git a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java index 1154a41a0ad..f7f928737fa 100644 --- a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java +++ b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/server/ThriftMethodHandler.java @@ -24,7 +24,6 @@ import org.apache.camel.Exchange; import org.apache.camel.Message; import org.apache.camel.component.thrift.ThriftConstants; import org.apache.camel.component.thrift.ThriftConsumer; -import org.apache.camel.component.thrift.ThriftEndpoint; import org.apache.camel.component.thrift.ThriftUtils; import org.apache.thrift.TApplicationException; import org.apache.thrift.TException; diff --git a/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java b/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java index dcdb4bf47b7..4fa959b8f19 100644 --- a/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java +++ b/components/camel-vertx/camel-vertx-http/src/main/java/org/apache/camel/component/vertx/http/VertxHttpEndpoint.java @@ -34,7 +34,6 @@ import org.apache.camel.support.DefaultEndpoint; import org.apache.camel.support.http.HttpUtil; import org.apache.camel.support.jsse.SSLContextParameters; import org.apache.camel.util.ObjectHelper; -import org.apache.camel.util.StringHelper; @UriEndpoint(firstVersion = "3.5.0", scheme = "vertx-http", title = "Vert.x HTTP Client", syntax = "vertx-http:httpUri", category = { Category.HTTP }, producerOnly = true, lenientProperties = true, diff --git a/etc/scripts/sign.sh b/etc/scripts/sign.sh index 7aafd104772..ae22f18c60c 100755 --- a/etc/scripts/sign.sh +++ b/etc/scripts/sign.sh @@ -1,5 +1,5 @@ #!/bin/sh - +# # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. @@ -7,13 +7,14 @@ # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +# # This is a utility script to sign and sha512 all files in the given directory. diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/nettyhttp/NettyHttpClientChunkedResponseTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/nettyhttp/NettyHttpClientChunkedResponseTest.java index 7f500f05cbc..b8130759733 100644 --- a/tests/camel-itest/src/test/java/org/apache/camel/itest/nettyhttp/NettyHttpClientChunkedResponseTest.java +++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/nettyhttp/NettyHttpClientChunkedResponseTest.java @@ -20,7 +20,6 @@ import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.AvailablePortFinder; import org.apache.camel.test.junit5.CamelTestSupport; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals;