You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Nicolas Filotto (Jira)" <ji...@apache.org> on 2023/03/17 08:04:00 UTC

[jira] [Comment Edited] (CAMEL-19161) camel-salesforce - Connection issue when using lazy login

    [ https://issues.apache.org/jira/browse/CAMEL-19161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17701560#comment-17701560 ] 

Nicolas Filotto edited comment on CAMEL-19161 at 3/17/23 8:03 AM:
------------------------------------------------------------------

I could reproduce it with a simple test of the following type (with real credentials):


{code:java}

class LazyConnectTest extends CamelTestSupport {

    @Test
    void lazyConnect() throws Exception {
        MockEndpoint mock = getMockEndpoint("mock:events");
        mock.expectedMessageCount(1);

        mock.assertIsSatisfied();
    }

    @Override
    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();
        SalesforceEndpointConfig salesforceEndpointConfig = new SalesforceEndpointConfig();
        KeyStoreParameters ksp = new KeyStoreParameters();
        SalesforceLoginConfig salesforceLoginConfig = new SalesforceLoginConfig();
        ksp.setResource("XXX.jks");
        ksp.setPassword("YYY");
        ksp.setType("JKS");
        salesforceEndpointConfig.setApiVersion("52.0");
        salesforceEndpointConfig.setRawPayload(true);
        salesforceLoginConfig.setLoginUrl("https://login.salesforce.com/");
        salesforceLoginConfig.setType(AuthenticationType.JWT);
        salesforceLoginConfig.setClientId("ZZZZ");
        salesforceLoginConfig.setClientSecret("AAAA");
        salesforceLoginConfig.setUserName("BBB");
        salesforceLoginConfig.setLazyLogin(true);
        salesforceLoginConfig.setKeystore(ksp);

        SalesforceComponent salesforceComponent = camelContext.getComponent("salesforce", SalesforceComponent.class);
        salesforceComponent.setLoginConfig(salesforceLoginConfig);
        salesforceComponent.setConfig(salesforceEndpointConfig);
        return camelContext;
    }

    @Override
    protected RoutesBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("salesforce:subscribe:event/Account_Event__e?replayId=-1")
                        .to("mock:events");
            }
        };
    }
}
{code}



was (Author: JIRAUSER285918):
I could reproduce it with a simple test of the following type (with real credentials):


{code:java}

class LazyConnectTest extends CamelTestSupport {

    @Test
    void lazyConnect() throws Exception {
        MockEndpoint mock = getMockEndpoint("mock:events");
        mock.expectedMessageCount(1);

        mock.assertIsSatisfied();
    }

    @Override
    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();
        SalesforceEndpointConfig salesforceEndpointConfig = new SalesforceEndpointConfig();
        KeyStoreParameters ksp = new KeyStoreParameters();
        SalesforceLoginConfig salesforceLoginConfig = new SalesforceLoginConfig();
        ksp.setResource("XXX.jks");
        ksp.setPassword("YYY");
        ksp.setType("JKS");
        salesforceEndpointConfig.setApiVersion("52.0");
        salesforceEndpointConfig.setRawPayload(true);
        salesforceLoginConfig.setLoginUrl("https://login.salesforce.com/");
        salesforceLoginConfig.setType(AuthenticationType.JWT);
        salesforceLoginConfig.setClientId("ZZZZ");
        salesforceLoginConfig.setClientSecret("AAAA");
        salesforceLoginConfig.setUserName("BBB");
        salesforceLoginConfig.setLazyLogin(true);
        salesforceLoginConfig.setKeystore(ksp);

        SalesforceComponent salesforceComponent = camelContext.getComponent("salesforce", SalesforceComponent.class);
        salesforceComponent.setLoginConfig(salesforceLoginConfig);
        salesforceComponent.setConfig(salesforceEndpointConfig);
        return camelContext;
    }

    @Override
    protected RoutesBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("salesforce:subscribe:event/Account_Event__e?replayId=-1")
                        .log("Received: ${body}")
                        .to("mock:events");
            }
        };
    }
}
{code}


> camel-salesforce - Connection issue when using lazy login
> ---------------------------------------------------------
>
>                 Key: CAMEL-19161
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19161
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-salesforce
>    Affects Versions: 3.11.1
>            Reporter: Nicolas Filotto
>            Priority: Minor
>
> When we enable lazy login, we end up with an exception of type:
> {noformat}
> 2023-03-16 16:49:40,743 [main           ] WARN  SalesforceComponent            - Missing property packages, getSObject* operations will NOT work without property rawPayload=true
> 2023-03-16 16:49:53,432 [main           ] INFO  SalesforceSession              - Login at Salesforce loginUrl: https://login.salesforce.com/services/oauth2/token
> 2023-03-16 16:50:28,009 [main           ] INFO  SalesforceSession              - Login successful
> 2023-03-16 16:50:33,456 [forceHttpClient] WARN  SubscriptionHelper             - Handshake failure: {failure={exception=java.lang.IllegalArgumentException: Invalid protocol null, message={ext={replay=true}, supportedConnectionTypes=[long-polling], channel=/meta/handshake, id=1, version=1.0}, connectionType=long-polling}, channel=/meta/handshake, id=1, successful=false}
> 2023-03-16 16:50:33,457 [forceHttpClient] INFO  SubscriptionHelper             - Handshaking after unexpected disconnect from Salesforce...
> 2023-03-16 16:50:57,019 [forceHttpClient] WARN  SubscriptionHelper             - Handshake failure: {failure={exception=java.lang.IllegalArgumentException: Invalid protocol null, message={ext={replay=true}, supportedConnectionTypes=[long-polling], channel=/meta/handshake, id=2, version=1.0}, connectionType=long-polling}, channel=/meta/handshake, id=2, successful=false}
> 2023-03-16 16:51:00,769 [forceHttpClient] WARN  SubscriptionHelper             - Handshake failure: {failure={exception=java.lang.IllegalArgumentException: Invalid protocol null, message={ext={replay=true}, supportedConnectionTypes=[long-polling], channel=/meta/handshake, id=3, version=1.0}, connectionType=long-polling}, channel=/meta/handshake, id=3, successful=false}
> {noformat}
> After a deeper investigation, it is due to the fact that when [creating the {{BayeuxClient}} during startup|https://github.com/apache/camel/blob/main/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/streaming/SubscriptionHelper.java#L405], it calls {{component.getSession().getInstanceUrl()}} to build the Url used by the client to connect but the instance Url is null as long as it not connected. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)