You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Sébastien Heilig (Jira)" <ji...@apache.org> on 2026/08/26 07:08:00 UTC

[jira] [Created] (CAMEL-24495) Authentication-type detection is not triggered via camel-salesforce-maven-plugin. It still uses grant-type USERNAME_PASSWORD

Sébastien Heilig created CAMEL-24495:
----------------------------------------

             Summary: Authentication-type detection is not triggered via camel-salesforce-maven-plugin. It still uses grant-type USERNAME_PASSWORD
                 Key: CAMEL-24495
                 URL: https://issues.apache.org/jira/browse/CAMEL-24495
             Project: Camel
          Issue Type: Bug
          Components: camel-salesforce
    Affects Versions: 4.22.0
            Reporter: Sébastien Heilig
             Fix For: Future


I am using camel-salesforce-maven-plugin to generate DTOs from salesforce for my customer. To do so, I was using grant_type=USERNAME_PASSWORD. It was working fine. In the Winter 27 update, that grant_type will be disabled.

 

It seems, on my sandbox, this is already the case. It was working fine up to last week. 

Thus, I wanted to switch to grant_type=CLIENT_CREDENTIALS.
By design, if no password (or empty password), the class 
org.apache.camel.component.salesforce.SalesforceLoginConfig seems to be able to determine the authenticationType via "getType" method.

However, using the camel-maven-salesforce-plugin, there is 2 issues:

 # The authenticationType is not a Parameter of [https://github.com/apache/camel/blob/main/components/camel-salesforce/camel-salesforce-maven-plugin/src/main/java/org/apache/camel/maven/AbstractSalesforceMojo.java] so this is not possible to override the grant_type
 # The SalesforceLoginConfig instanciated here : [https://github.com/apache/camel/blob/main/components/camel-salesforce/camel-salesforce-codegen/src/main/java/org/apache/camel/component/salesforce/codegen/AbstractSalesforceExecution.java] enforces the constructor using USERNAME_PASSWORD, ignoring the fact that password is empty and that I want to use the CLIENT_CREDENTIALS authentication. The auto-detection of the grant_type is bypassed.

 

*Step to reproduce*
 * Having a salesforce instances with a connectedApp
 * Using a client_id, client_secret, username and NO PASSWORD
 ** 
<camelSalesforce.password></camelSalesforce.password>
 ** If you don't put it, the maven plugin refuses to start mentioning that field is mandatory.
 * Configuring the camel-salesforce-maven-plugin with

 
{code:java}
 <plugin>
        <groupId>org.apache.camel.maven</groupId>
        <artifactId>camel-salesforce-maven-plugin</artifactId>
        <version>${camel-salesforce-maven-plugin.version}</version>
        <configuration>
          <outputDirectory>${project.build.directory}/generated-sources/camel</outputDirectory>
          <packageName>com.my.company.dtos</packageName>
          <clientId>${camelSalesforce.clientId}</clientId>
          <clientSecret>${camelSalesforce.clientSecret}</clientSecret>
          <userName>${camelSalesforce.userName}</userName>
<!--          <password>${camelSalesforce.password}</password>-->
          <loginUrl default-value="https://login.salesforce.com">${camelSalesforce.loginUrl}
          </loginUrl>
          <isHttpProxySecure>false</isHttpProxySecure>
          <includes>
            <include>Account</include>
          </includes>
          <version>63.0</version>
          <httpProxyHost>${camelSalesforce.httpProxyHost}</httpProxyHost>
          <httpProxyPort>${camelSalesforce.httpProxyPort}</httpProxyPort>
        </configuration>
        <executions>
          <execution>
            <id>generate-dtos</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/generated-sources/camel</outputDirectory>
            </configuration>
          </execution>
        </executions>
      </plugin> {code}

*Error you get*

{errors:[\{"errorCode":"invalid_grant","message":"Login error code:[invalid_grant] description:[authentication failure]","fields":null}],statusCode:400}

If you debug the plugin, you see the constructor of SalesforceLoginConfig called is the following:

 
{code:java}
public SalesforceLoginConfig(String loginUrl, String clientId, String clientSecret, String userName, String password,
                             boolean lazyLogin) {
    this(AuthenticationType.USERNAME_PASSWORD, loginUrl, clientId, clientSecret, null, userName, password, lazyLogin, null);
} {code}
And you see that the getType method is never used using the automatic detection.



 

*Expected fix*

The fix must use the empty constructor and uses the setter to override the parameter authenticationType in case this one is provided AND auto-detect that if password is missing (or empty), the grant_type should be auto-detected via the getType method and not forced to USERNAME_PASSWORD.

*Versions impacted*

I am using the version 4.22.0 but the previous versions (down to 4.18.x as far as I have checked) are also concerned.
 

 



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