From fd8b9b72e6cdfbb3f1ae533328851790f6bd9f8d Mon Sep 17 00:00:00 2001 From: Claus Ibsen Date: Mon, 20 Jul 2026 14:26:07 +0200 Subject: [PATCH] CAMEL-24184: Fix 19 medium-severity findings from camel-cxf code review Co-Authored-By: Claude Opus 4.6 Signed-off-by: Claus Ibsen --- .../cxf/common/header/CxfHeaderHelper.java | 11 +++- .../component/cxf/jaxrs/CxfConverter.java | 4 ++ .../component/cxf/jaxrs/CxfRsInvoker.java | 2 +- .../component/cxf/jaxrs/CxfRsProducer.java | 18 +++++- .../cxf/jaxrs/DefaultCxfRsBinding.java | 11 ++-- .../SubResourceClassInvocationHandler.java | 2 +- .../cxf/jaxws/CxfClientCallback.java | 4 +- .../component/cxf/jaxws/CxfEndpoint.java | 2 +- .../cxf/jaxws/DefaultCxfBinding.java | 12 +++- .../cxf/spring/jaxrs/CxfRsSpringEndpoint.java | 18 +++++- .../jaxrs/SpringJAXRSServerFactoryBean.java | 10 ++++ .../cxf/spring/jaxws/CxfSpringEndpoint.java | 58 ++++++++++--------- .../component/cxf/transport/CamelConduit.java | 7 ++- .../cxf/transport/CamelOutputStream.java | 16 +++-- .../message/DefaultCxfMessageMapper.java | 3 +- 15 files changed, 123 insertions(+), 55 deletions(-) diff --git a/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java b/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java index 5daf623add20a..8552309c5810b 100644 --- a/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java +++ b/components/camel-cxf/camel-cxf-common/src/main/java/org/apache/camel/component/cxf/common/header/CxfHeaderHelper.java @@ -104,7 +104,12 @@ public static void propagateCamelHeadersToCxfHeaders( LOG.trace("Propagate Camel header: {}={} as {}", entry.getKey(), entry.getValue(), cxfHeaderName); - requestHeaders.put(cxfHeaderName, Arrays.asList(entry.getValue().toString())); + Object values = entry.getValue(); + if (values instanceof List) { + requestHeaders.put(cxfHeaderName, CastUtils.cast((List) values, String.class)); + } else { + requestHeaders.put(cxfHeaderName, Arrays.asList(values.toString())); + } }); } @@ -191,8 +196,8 @@ public static void propagateCxfHeadersToCamelHeaders( LOG.trace("Populate external header: {}={} as {}", entry.getKey(), entry.getValue(), camelHeaderName); if (!camelHeaderName.startsWith(":")) { - ///* Ignore HTTP/2 pseudo headers such as :status */ - camelHeaders.put(camelHeaderName, entry.getValue().get(0)); + List values = entry.getValue(); + camelHeaders.put(camelHeaderName, values.size() == 1 ? values.get(0) : values); } }); } diff --git a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java index da90d9c892641..f1ed549fcde59 100644 --- a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java +++ b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfConverter.java @@ -223,6 +223,10 @@ public static T convertTo( Response response = (Response) value; Object entity = response.getEntity(); + if (entity == null) { + return (T) MISS_VALUE; + } + TypeConverter tc = registry.lookup(type, entity.getClass()); if (tc != null) { return tc.convertTo(type, exchange, entity); diff --git a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java index daa83b583355f..768d01be35c1b 100644 --- a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java +++ b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java @@ -182,7 +182,7 @@ private org.apache.camel.Exchange prepareExchange( Exchange cxfExchange, Method method, Object[] paramArray, Object response) { ExchangePattern ep = ExchangePattern.InOut; - if (method.getReturnType() == Void.class) { + if (method.getReturnType() == Void.TYPE || method.getReturnType() == Void.class) { ep = ExchangePattern.InOnly; } final org.apache.camel.Exchange camelExchange = endpoint.createExchange(ep); diff --git a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java index 6f527c05708ea..829fccecd1e45 100644 --- a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java +++ b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java @@ -647,7 +647,19 @@ protected Map parseResponseHeaders(Object response, Exchange cam for (Map.Entry> entry : resp.getMetadata().entrySet()) { LOG.trace("Parse external header {}={}", entry.getKey(), entry.getValue()); - answer.put(entry.getKey(), entry.getValue().get(0).toString()); + List values = entry.getValue(); + if (values.size() == 1) { + answer.put(entry.getKey(), values.get(0).toString()); + } else { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < values.size(); i++) { + if (i > 0) { + sb.append(", "); + } + sb.append(values.get(i)); + } + answer.put(entry.getKey(), sb.toString()); + } } } @@ -701,6 +713,7 @@ public void completed(Response response) { // handle cookies saveCookies(exchange, client, cxfRsEndpoint.getCookieHandler()); if (!exchange.getPattern().isOutCapable()) { + response.close(); return; } @@ -806,6 +819,9 @@ public void completed(Object body) { return; } if (!exchange.getPattern().isOutCapable()) { + if (response != null) { + response.close(); + } return; } 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 a100f55fa0c71..39043bd8aad8b 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 @@ -123,10 +123,11 @@ private static void populateViaResponse(org.apache.cxf.message.Exchange cxfExcha private static void setProtocolHeaders(org.apache.cxf.message.Exchange cxfExchange, Message response) { Map 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)); + if (cxfExchange == null || cxfExchange.getOutMessage() == null) { + return; } + cxfExchange.getOutMessage().putIfAbsent(CxfConstants.PROTOCOL_HEADERS, + new TreeMap<>(String.CASE_INSENSITIVE_ORDER)); final Map> cxfHeaders = CastUtils .cast((Map) cxfExchange.getOutMessage().get(CxfConstants.PROTOCOL_HEADERS)); @@ -310,8 +311,8 @@ protected void copyProtocolHeader(org.apache.cxf.message.Message cxfMessage, Mes /* 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)); + List values = entry.getValue(); + camelMessage.setHeader(entry.getKey(), values.size() == 1 ? values.get(0) : values); } continue; } diff --git a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java index c2c986f9414c4..b57f54f473c2d 100644 --- a/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java +++ b/components/camel-cxf/camel-cxf-rest/src/main/java/org/apache/camel/component/cxf/jaxrs/SubResourceClassInvocationHandler.java @@ -30,7 +30,7 @@ public class SubResourceClassInvocationHandler implements InvocationHandler { public Object invoke(Object proxy, Method method, Object[] parameters) throws Throwable { Object result = null; Class returnType = method.getReturnType(); - if (!returnType.isAssignableFrom(Void.class)) { + if (returnType != Void.TYPE && returnType != Void.class) { // create a instance to return if (returnType.isInterface()) { // create a new proxy for it diff --git a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfClientCallback.java b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfClientCallback.java index 98f2e4362337c..ad655051c868b 100644 --- a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfClientCallback.java +++ b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfClientCallback.java @@ -88,7 +88,9 @@ public void handleException(Map ctx, Throwable ex) { ConduitSelector conduitSelector = cxfExchange.get(ConduitSelector.class); if (conduitSelector != null) { conduitSelector.complete(cxfExchange); - ex = cxfExchange.getOutMessage().getContent(Exception.class); + if (cxfExchange.getOutMessage() != null) { + ex = cxfExchange.getOutMessage().getContent(Exception.class); + } if (ex == null && cxfExchange.getInMessage() != null) { ex = cxfExchange.getInMessage().getContent(Exception.class); } diff --git a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java index faa19fabf4030..3c68352c8dd76 100644 --- a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java +++ b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/CxfEndpoint.java @@ -137,7 +137,7 @@ public class CxfEndpoint extends DefaultEndpoint implements AsyncEndpoint, Heade private static final Logger LOG = LoggerFactory.getLogger(CxfEndpoint.class); @UriParam(label = "advanced") - protected Bus bus; + protected volatile Bus bus; @UriParam(label = "advanced") protected boolean defaultBus; protected volatile boolean createBus; diff --git a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java index cbe2af5c8d90c..e07f9976bb507 100644 --- a/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java +++ b/components/camel-cxf/camel-cxf-soap/src/main/java/org/apache/camel/component/cxf/jaxws/DefaultCxfBinding.java @@ -473,8 +473,14 @@ public void populateCxfHeaderFromCamelExchangeBeforeCheckError( propagateHeadersFromCamelToCxf(camelExchange, camelHeaders, cxfExchange, responseContext); - if (cxfExchange.getOutMessage() != null) { - cxfExchange.getOutMessage().put(CxfConstants.PROTOCOL_HEADERS, responseContext.get(CxfConstants.PROTOCOL_HEADERS)); + Object protocolHeaders = responseContext.get(CxfConstants.PROTOCOL_HEADERS); + if (protocolHeaders != null) { + // Store on the CXF exchange so headers survive into the fault path + // (the out message does not exist yet at this point) + cxfExchange.put(CxfConstants.PROTOCOL_HEADERS, protocolHeaders); + if (cxfExchange.getOutMessage() != null) { + cxfExchange.getOutMessage().put(CxfConstants.PROTOCOL_HEADERS, protocolHeaders); + } } } @@ -866,7 +872,7 @@ protected String replaceMultiPartContentType(String contentType) { if (part.charAt(0) == '\"') { result = part.substring(1, part.length() - 1); } else { - result = part.substring(5); + result = part; } break; } diff --git a/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/CxfRsSpringEndpoint.java b/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/CxfRsSpringEndpoint.java index 993cb1790a7a2..a2f564abff432 100644 --- a/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/CxfRsSpringEndpoint.java +++ b/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/CxfRsSpringEndpoint.java @@ -48,8 +48,10 @@ private void init(AbstractJAXRSFactoryBean bean) { setBeanId(beanIdAware.getBeanId()); } - ApplicationContext applicationContext = ((SpringCamelContext) getCamelContext()).getApplicationContext(); - configurer = new ConfigurerImpl(applicationContext); + if (getCamelContext() instanceof SpringCamelContext springCamelContext) { + ApplicationContext applicationContext = springCamelContext.getApplicationContext(); + configurer = new ConfigurerImpl(applicationContext); + } } @Override @@ -58,6 +60,14 @@ protected JAXRSServerFactoryBean newJAXRSServerFactoryBean() { return (JAXRSServerFactoryBean) bean; } + @Override + protected void setupJAXRSServerFactoryBean(JAXRSServerFactoryBean sfb) { + if (sfb instanceof SpringJAXRSServerFactoryBean springBean) { + springBean.setPerformInvocation(isPerformInvocation()); + } + super.setupJAXRSServerFactoryBean(sfb); + } + @Override protected JAXRSClientFactoryBean newJAXRSClientFactoryBean() { checkBeanType(bean, JAXRSClientFactoryBean.class); @@ -67,7 +77,9 @@ protected JAXRSClientFactoryBean newJAXRSClientFactoryBean() { @Override protected void setupJAXRSClientFactoryBean(JAXRSClientFactoryBean cfb, String address) { // apply Spring bean config first so URI options can override - configurer.configureBean(beanId, cfb); + if (configurer != null) { + configurer.configureBean(beanId, cfb); + } if (getModelRef() != null) { cfb.setModelRef(getModelRef()); } diff --git a/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/SpringJAXRSServerFactoryBean.java b/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/SpringJAXRSServerFactoryBean.java index e9dc801dd9073..0a1e5f986fd78 100644 --- a/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/SpringJAXRSServerFactoryBean.java +++ b/components/camel-cxf/camel-cxf-spring-rest/src/main/java/org/apache/camel/component/cxf/spring/jaxrs/SpringJAXRSServerFactoryBean.java @@ -18,6 +18,7 @@ import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.camel.component.cxf.common.NullFaultListener; import org.apache.camel.component.cxf.jaxrs.BeanIdAware; @@ -107,6 +108,15 @@ public void setLoggingSizeLimit(int loggingSizeLimit) { } } + @Override + public void setProperties(Map properties) { + if (this.getProperties() != null && properties != null) { + this.getProperties().putAll(properties); + } else { + super.setProperties(properties); + } + } + public void setSkipFaultLogging(boolean skipFaultLogging) { if (skipFaultLogging) { if (this.getProperties() == null) { diff --git a/components/camel-cxf/camel-cxf-spring-soap/src/main/java/org/apache/camel/component/cxf/spring/jaxws/CxfSpringEndpoint.java b/components/camel-cxf/camel-cxf-spring-soap/src/main/java/org/apache/camel/component/cxf/spring/jaxws/CxfSpringEndpoint.java index fa792b1abff81..8d25753bbe2a1 100644 --- a/components/camel-cxf/camel-cxf-spring-soap/src/main/java/org/apache/camel/component/cxf/spring/jaxws/CxfSpringEndpoint.java +++ b/components/camel-cxf/camel-cxf-spring-soap/src/main/java/org/apache/camel/component/cxf/spring/jaxws/CxfSpringEndpoint.java @@ -274,6 +274,7 @@ public void setApplicationContext(ApplicationContext ctx) throws BeansException if (bus == null) { bus = BusWiringBeanFactoryPostProcessor.addDefaultBus(ctx); + enableSpringBusShutdownGracefully(bus); } } @@ -312,46 +313,47 @@ private void enableSpringBusShutdownGracefully(Bus bus) { && applicationContext instanceof AbstractApplicationContext abstractApplicationContext) { ApplicationListener cxfSpringBusListener = null; for (ApplicationListener listener : abstractApplicationContext.getApplicationListeners()) { - - if (listener.getClass().getName().indexOf("org.apache.cxf.bus.spring.SpringBus") >= 0) { + // match by identity to ensure we remove the listener for this specific bus + if (listener == springBus) { cxfSpringBusListener = listener; + break; } } + if (cxfSpringBusListener == null) { + return; + } ApplicationEventMulticaster aem = applicationContext .getBean(AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class); aem.removeApplicationListener(cxfSpringBusListener); abstractApplicationContext.addApplicationListener((final ApplicationEvent event) -> { - new Thread() { - @Override - public void run() { - if (event instanceof ContextClosedEvent && bus.getState() == BusState.RUNNING) { - - try { - boolean done = false; - ShutdownStrategy shutdownStrategy = ((DefaultCamelContext) getCamelContext()) - .getShutdownStrategy(); - while (!done && !shutdownStrategy.hasTimeoutOccurred()) { - int inflight = getCamelContext().getInflightRepository().size(); - if (inflight != 0) { - Thread.sleep(1000); - } else { - done = true; - } + if (event instanceof ContextClosedEvent && bus.getState() == BusState.RUNNING) { + // only spawn a thread for shutdown to wait for in-flight exchanges + new Thread(() -> { + try { + boolean done = false; + ShutdownStrategy shutdownStrategy = ((DefaultCamelContext) getCamelContext()) + .getShutdownStrategy(); + while (!done && !shutdownStrategy.hasTimeoutOccurred()) { + int inflight = getCamelContext().getInflightRepository().size(); + if (inflight != 0) { + Thread.sleep(1000); + } else { + done = true; } - } catch (InterruptedException e) { - LOG.info("Interrupted while enabling graceful SpringBus shutdown"); - Thread.currentThread().interrupt(); - } catch (Exception e) { - LOG.debug("Error when enabling SpringBus shutdown gracefully", e); } - springBus.onApplicationEvent(event); - } else { - springBus.onApplicationEvent(event); + } catch (InterruptedException e) { + LOG.info("Interrupted while enabling graceful SpringBus shutdown"); + Thread.currentThread().interrupt(); + } catch (Exception e) { + LOG.debug("Error when enabling SpringBus shutdown gracefully", e); } - } - }.start(); + springBus.onApplicationEvent(event); + }).start(); + } else { + springBus.onApplicationEvent(event); + } }); } diff --git a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelConduit.java b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelConduit.java index 013d635148280..2c705116b1705 100644 --- a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelConduit.java +++ b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelConduit.java @@ -47,6 +47,7 @@ public class CamelConduit extends AbstractConduit implements Configurable { private final EndpointInfo endpointInfo; private String targetCamelEndpointUri; private final Producer producer; + private volatile boolean closed; private ProducerTemplate camelTemplate; private final Bus bus; private final HeaderFilterStrategy headerFilterStrategy; @@ -92,9 +93,11 @@ public CamelContext getCamelContext() { return camelContext; } - // prepare the message for send out , not actually send out the message @Override public void prepare(Message message) throws IOException { + if (closed) { + throw new IOException("CamelConduit is already closed"); + } LOG.trace("CamelConduit send message"); CamelOutputStream os = new CamelOutputStream( this.targetCamelEndpointUri, @@ -107,8 +110,8 @@ public void prepare(Message message) throws IOException { @Override public void close() { + closed = true; LOG.trace("CamelConduit closed "); - // shutdown the producer try { producer.stop(); } catch (Exception e) { diff --git a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java index fb6c9434e4485..73ecea12a0693 100644 --- a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java +++ b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/CamelOutputStream.java @@ -130,14 +130,22 @@ protected void asyncInvokeFromWorkQueue(final Exchange exchange) throws IOExcept try { syncInvoke(exchange); } catch (Exception e) { - ((PhaseInterceptorChain) outMessage.getInterceptorChain()).abort(); outMessage.setContent(Exception.class, e); - ((PhaseInterceptorChain) outMessage.getInterceptorChain()).unwind(outMessage); - MessageObserver mo = outMessage.getInterceptorChain().getFaultObserver(); + if (outMessage.getInterceptorChain() instanceof PhaseInterceptorChain chain) { + chain.abort(); + chain.unwind(outMessage); + } + MessageObserver mo = outMessage.getInterceptorChain() != null + ? outMessage.getInterceptorChain().getFaultObserver() + : null; if (mo == null) { mo = outMessage.getExchange().get(MessageObserver.class); } - mo.onMessage(outMessage); + if (mo != null) { + mo.onMessage(outMessage); + } else { + LOG.error("No fault observer available to handle transport error", e); + } } }; diff --git a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java index bdbd28262338a..e1f361aa3dfeb 100644 --- a/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java +++ b/components/camel-cxf/camel-cxf-transport/src/main/java/org/apache/camel/component/cxf/transport/message/DefaultCxfMessageMapper.java @@ -152,8 +152,7 @@ protected String getBasePath(Exchange camelExchange) { if (answer == null) { answer = camelExchange.getFromEndpoint().getEndpointUri(); // remove leading scheme before the http(s) transport so we build a correct base path - answer = answer.replaceFirst("^\\w+:http", "http"); - answer = answer.replaceFirst("^\\w+:https", "https"); + answer = answer.replaceFirst("^\\w+:(https?)", "$1"); } return answer;