Hi,

To add to my code snippet, I see in the logs that I could unbind the bean
and rebind it but somehow in the route url this string
*"?authenticator=#exchangeAuthenticator"
*does not show the updated values. I still get the error for the wrong
*tenantID
*I passed deliberately before last tim
*e.*

*ERROR:*

*c.n.w.r.RouterUtil: Exception occurred while creating IMAP route: {}Failed
to start route mail-route-imap because of
com.microsoft.aad.msal4j.MsalServiceException: AADSTS900023: Specified
tenant identifier '5d471751-******-70f44f9630b' is neither a valid DNS
name, nor a valid external domain. *

*Old wrong tenantID: * *5d471751-******-70f44f9630b*
New correct tenantID passed to the bean: *5d471751-******-70f44f9630b**0*
*But this last correct one is not picked up by the route.*

Regards,
Dipak.


On Tue, Mar 4, 2025 at 8:53 PM Dipak Rai <fullstackdipak...@gmail.com>
wrote:

> Hi,
>
> Yes, Riccardo.
>
> //code snippet removing the route before recreating the authenticator bean
> Route route = camelContext.getRoute(MyConstants.IMAP_ROUTE_ID);
> if (route != null) {
> camelContext.getRouteController().stopRoute(MyConstants.IMAP_ROUTE_ID);
> camelContext.removeRoute(MyConstants.IMAP_ROUTE_ID);
> }
> camelContext.addRoutes(new RouteBuilder() {
> @Override
> public void configure() throws Exception {
> from(getImapConfig(imapMailId, imapPort, pollingInterval, debugMode))
> .routeId(MyConstants.IMAP_ROUTE_ID)
> .autoStartup(true)
> .to("direct:gotosecondstep");
> }
> });
>
>
> //method where the route is being built as a string
> public String getImapConfig(String imapUrl, String imapPort, String
> pollingInterval, String debugMode) {
> authenticatorService.updateAuthenticator();
> return "imaps://" + imapUrl + ":" + imapPort
> + "?authenticator=#exchangeAuthenticator"
> + "&debugMode="+ debugMode
> + "&delete=false"
> + "&unseen=true"
> + "&delay=" + pollingInterval
> + "&mail.imaps.auth.mechanisms=XOAUTH2"
> + "&disconnect=true"
> + "&closeFolder=true";
> }
>
> Regards.
>
> On Tue, Mar 4, 2025 at 4:22 PM Modanese, Riccardo
> <riccardo.modan...@eurotech.com.invalid> wrote:
>
>> Hi,
>>                 I’ injecting beans at runtime using Camel with and
>> without Spring (and it works) but, I did it before starting the route.
>> From my understanding you are trying to replace a bean in the context
>> once the route is running, am I right?
>> If so, did you try to restart the route once you replace the bean in the
>> context?
>>
>> Riccardo
>>
>> From: Dipak Rai <fullstackdipak...@gmail.com>
>> Date: Tuesday, 4 March 2025 at 11:47
>> To: users@camel.apache.org <users@camel.apache.org>
>> Subject: Re: Refreshing Bean To Build An IMAP Route Should Have Worked
>> I'll rephrase my question here.
>> Is it possible to just kick out the old bean from the Camel Context (and
>> in
>> turn from the Spring context) and inject a new bean while using the same
>> to
>> build a route dynamically as shown below? I don't see any explicit '
>> *unbind()*' method with the *ApplicationContextBeanRepository*.
>>
>> *Code snippet:*
>> public void updateAuthenticator() {
>> String tenantId = emailConfigBean.getTenantId();
>> String clientId = emailConfigBean.getClientId();
>> String clientSecret = emailConfigBean.getClientSecret();
>> String wsAdapterMailBox = emailConfigBean.getWSAdapterMailBox();
>>
>> try {
>> MicrosoftExchangeOnlineOAuth2MailAuthenticator newExchangeAuthenticator =
>> new MicrosoftExchangeOnlineOAuth2MailAuthenticator(
>> tenantId, clientId, clientSecret, wsAdapterMailBox);
>> Registry registry = camelContext.getRegistry(Registry.class);
>> MicrosoftExchangeOnlineOAuth2MailAuthenticator existingAuthenticatorBean =
>> registry.lookupByNameAndType("exchangeAuthenticator",
>> MicrosoftExchangeOnlineOAuth2MailAuthenticator.class);
>> // Unbind the existing 'exchangeAuthenticator' bean
>> if (null != existingAuthenticatorBean) {
>> registry.unbind("exchangeAuthenticator");
>> }
>> // Bind the new 'exchangeAuthenticator' bean
>> registry.bind("exchangeAuthenticator", newExchangeAuthenticator);
>> } catch (Exception e) {
>> }
>> }
>>
>>
>> On Tue, Mar 4, 2025 at 10:40 AM Dipak Rai <fullstackdipak...@gmail.com>
>> wrote:
>>
>> > Hi,
>> >
>> > In the below snippet I am trying to dynamically build the IMAP route by
>> > refreshing my 'exchangeAuthenticator' bean. Camel seemingly supports
>> only
>> > bean by name injection into the route. Although I am able to instantiate
>> > the bean with new values yet the route refers to the old bean values and
>> > fails with error.
>> >
>> > public void updateAuthenticator() {
>> >    String tenantId = emailConfigBean.getTenantId();
>> >    String clientId = emailConfigBean.getClientId();
>> >    String clientSecret = emailConfigBean.getClientSecret();
>> >    String wsAdapterMailBox = emailConfigBean.getWSAdapterMailBox();
>> >    try {
>> >        MicrosoftExchangeOnlineOAuth2MailAuthenticator
>> newExchangeAuthenticator = new
>> MicrosoftExchangeOnlineOAuth2MailAuthenticator(
>> >                tenantId, clientId, clientSecret, wsAdapterMailBox);
>> >        // Get the registry
>> >        DefaultRegistry defaultRegistry  = (DefaultRegistry)
>> camelContext.getRegistry();
>> >        // Unbind the existing 'exchangeAuthenticator' bean
>> > MicrosoftExchangeOnlineOAuth2MailAuthenticator exchangeAuthenticator =
>> (MicrosoftExchangeOnlineOAuth2MailAuthenticator) defaultRegistry
>> > .lookupByName("exchangeAuthenticator");
>> >        if (null != exchangeAuthenticator) {
>> >            defaultRegistry.unbind("exchangeAuthenticator");
>> >        }
>> >        defaultRegistry.bind("exchangeAuthenticator",
>> newExchangeAuthenticator);
>> >        defaultRegistry.setCamelContext(camelContext);
>> >    } catch (Exception e) {
>> >        log.error("Exception in updating authenticator bean: {}",
>> e.getMessage());
>> >    }
>> > }
>> >
>> > //building the route dynamically through refreshed values of bean
>> > public String getImapConfig(String imapUrl, String imapPort, String
>> pollingInterval, String debugMode) {
>> >         authenticatorService.updateAuthenticator();
>> >         return "imaps://" + imapUrl + ":" + imapPort
>> >                 + "?authenticator=#exchangeAuthenticator"
>> >                 + "&debugMode="+ debugMode
>> >                 + "&delete=false"
>> >                 + "&unseen=true"
>> >                 + "&delay=" + pollingInterval
>> >                 + "&mail.imaps.auth.mechanisms=XOAUTH2"
>> >                 + "&disconnect=true"
>> >                 + "&closeFolder=true";
>> >     }
>> >
>> > Regards,
>> >
>> > Dipak.
>> >
>> >
>> >
>>
>

Reply via email to