On Wed, Nov 22, 2023 at 7:17 PM Pascal Schumacher
wrote:
> Hi,
>
> while migrating a Project from Camel 3 to Camel 4 I noticed that the
> $USER:$PASSWORD@$SERVER notation for basic authentication no longer works.
>
> `to("https://USER:PASSWORD@localhost
> :8080/example?authenticationPreemptive=true")`
> works in Camel 3.21.2
>
> but fails in Camel 4.0.3 with:
>
> org.apache.hc.client5.http.ClientProtocolException: No credentials for
> preemptive authentication
> at
>
> org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:173)
> at
>
> org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:245)
> at
>
> org.apache.camel.component.http.HttpProducer.executeMethod(HttpProducer.java:487)
> at
> org.apache.camel.component.http.HttpProducer.process(HttpProducer.java:269)
> at
>
> org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:65)
> at
> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:172)
> at
>
> org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:475)
> at
>
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:196)
> at
>
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:164)
> at
>
> org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
> at
> org.apache.camel.processor.Pipeline.process(Pipeline.java:163)
> at
>
> org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:383)
> at
>
> org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:81)
> at
>
> org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:32)
> at
>
> org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:132)
> at
>
> org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:736)
> at
>
> org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:696)
> at
>
> org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:674)
> at
>
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:330)
> at
>
> org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:245)
> at
>
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1239)
> at
>
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1229)
> at
>
> org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1122)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source)
> at java.base/java.lang.Thread.run(Unknown Source)
> Caused by: org.apache.hc.core5.http.HttpException: No credentials for
> preemptive authentication
> at
>
> org.apache.camel.component.http.PreemptiveAuthExecChainHandler.execute(PreemptiveAuthExecChainHandler.java:52)
> at
>
> org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
> at
>
> org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170)
> ... 25 common frames omitted
>
> I did not find anything related to this in
> https://camel.apache.org/manual/camel-4-migration-guide.html
>
> Did I miss something? Is this an intentional behavior change or a bug?
>
> It works if I use
> `to("
> https://localhost:8080/example?authenticationPreemptive=true=USER=PASSWORD
> ")`
> instead.
>
>
Okay then use that. Its also the preferred way with using options instead
of the uri authority that is very complex and something we will not support
in the future moving away from java.net.Uri object.
> Thanks and kind regards,
> Pascal
>
--
Claus Ibsen
-
@davsclaus
Camel in Action 2: