Spring Configuration to test integration to Salesforce using PartnerConnection, EnterpriseConnection and BulkConnection. Create a properties file called salesforcesync.properties with all the login details
salesforcesync.properties
salesforce.sandbox.username=***your username *** salesforce.sandbox.password=***your password + security token *** salesforce.sandbox.url=https://test.salesforce.com/services/Soap/u/29.0 salesforce.sandbox.enterprise.url=https://test.salesforce.com/services/Soap/c/29.0/ salesforce.sandbox.version=29.0 salesforce.production.username=***your username *** salesforce.production.password=***your password + security token *** salesforce.production.url=https://login.salesforce.com/services/Soap/u/29.0 salesforce.production.enterprise.url=https://login.salesforce.com/services/Soap/c/29.0 salesforce.production.version=29.0
Salesforce Authentication Spring Configuration
package com.sforce.authentication; import javax.inject.Inject; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import com.sforce.async.AsyncApiException; import com.sforce.async.BulkConnection; import com.sforce.soap.partner.Connector; import com.sforce.soap.partner.PartnerConnection; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; /** * @author tmichels */ @PropertySource("classpath:/salesforcesync.properties") @Configuration public class SalesforceAuthenticationConfigImpl implements SalesforceAuthenticationConfig { @Inject private Environment environment; private PartnerConnection partnerConnection = null; private BulkConnection bulkConnection = null; @Bean(name="loginToProductionSalesforce") public PartnerConnection loginToProductionSalesforce() { try { ConnectorConfig config = new ConnectorConfig(); config.setUsername(environment.getProperty("salesforce.production.username")); config.setPassword(environment.getProperty("salesforce.production.password")); partnerConnection = Connector.newConnection(config); } catch (ConnectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return partnerConnection; } @Bean(name="loginToSandboxSalesforce") public PartnerConnection loginToSandboxSalesforce() { try { ConnectorConfig config = new ConnectorConfig(); config.setUsername(environment.getProperty("salesforce.sandbox.username")); config.setPassword(environment.getProperty("salesforce.sandbox.password")); config.setAuthEndpoint(environment.getProperty("salesforce.sandbox.url")); partnerConnection = Connector.newConnection(config); } catch (ConnectionException ce) { ce.printStackTrace(); } return partnerConnection; } @Bean(name="bulkLoginToProductionSalesforce") public BulkConnection bulkLoginToProductionSalesforce() { try { ConnectorConfig partnerConfig = new ConnectorConfig(); partnerConfig.setUsername(environment.getProperty("salesforce.production.username")); partnerConfig.setPassword(environment.getProperty("salesforce.production.password")); partnerConfig.setAuthEndpoint(environment.getProperty("salesforce.production.url")); partnerConnection = Connector.newConnection(partnerConfig); ConnectorConfig config = new ConnectorConfig(); config.setSessionId(partnerConfig.getSessionId()); String soapEndpoint = partnerConfig.getServiceEndpoint(); String restEndpoint = soapEndpoint.substring(0, soapEndpoint.indexOf("Soap/")) + "async/" + environment.getProperty("salesforce.sandbox.version"); config.setRestEndpoint(restEndpoint); // This should only be false when doing debugging. config.setCompression(true); // Set this to true to see HTTP requests and responses on stdout config.setTraceMessage(false); bulkConnection = new BulkConnection(config); } catch (AsyncApiException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ConnectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bulkConnection; } @Bean(name="bulkLoginToSandboxSalesforce") public BulkConnection bulkLoginToSandboxSalesforce() { try { ConnectorConfig partnerConfig = new ConnectorConfig(); partnerConfig.setUsername(environment.getProperty("salesforce.sandbox.username")); partnerConfig.setPassword(environment.getProperty("salesforce.sandbox.password")); partnerConfig.setAuthEndpoint(environment.getProperty("salesforce.sandbox.url")); partnerConnection = Connector.newConnection(partnerConfig); ConnectorConfig bulkconfig = new ConnectorConfig(); bulkconfig.setSessionId(partnerConfig.getSessionId()); String soapEndpoint = partnerConfig.getServiceEndpoint(); String restEndpoint = soapEndpoint.substring(0, soapEndpoint.indexOf("Soap/")) + "async/" + environment.getProperty("salesforce.sandbox.version"); bulkconfig.setRestEndpoint(restEndpoint); // This should only be false when doing debugging. bulkconfig.setCompression(true); // Set this to true to see HTTP requests and responses on stdout bulkconfig.setTraceMessage(false); bulkConnection = new BulkConnection(bulkconfig); } catch (AsyncApiException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ConnectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bulkConnection; } @Bean(name="loginToSalesforceSandboxEnterprise") public EnterpriseConnection loginToSandboxSalesforceEnterprise() { try { ConnectorConfig config = new ConnectorConfig(); config.setUsername(environment.getProperty("salesforce.sandbox.username")); config.setPassword(environment.getProperty("salesforce.sandbox.password")); config.setAuthEndpoint(environment.getProperty("salesforce.sandbox.enterprise.url")); config.setValidateSchema(true); config.setCompression(false); config.setConnectionTimeout(360000); config.setTraceMessage(true); config.setPrettyPrintXml(true); enterpriseConnection = new EnterpriseConnection(config); } catch (ConnectionException ce) { ce.printStackTrace(); } return enterpriseConnection; } @Bean(name="loginToSalesforceProductionEnterprise") public EnterpriseConnection loginToProductionSalesforceEnterprise() { try { ConnectorConfig config = new ConnectorConfig(); config.setUsername(environment.getProperty("salesforce.production.username")); config.setPassword(environment.getProperty("salesforce.production.password")); config.setAuthEndpoint(environment.getProperty("salesforce.production.url")); config.setValidateSchema(true); config.setCompression(false); config.setConnectionTimeout(360000); config.setTraceMessage(true); config.setPrettyPrintXml(true); enterpriseConnection = new EnterpriseConnection(config); } catch (ConnectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return enterpriseConnection; } }
Junit test class to assert login was successful
package com.sforce.authentication; import static org.junit.Assert.*; import javax.inject.Inject; import javax.inject.Named; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; import com.sforce.async.BulkConnection; import com.sforce.authentication.SalesforceAuthenticationConfig; import com.sforce.authentication.SalesforceAuthenticationConfigImpl; import com.sforce.soap.partner.PartnerConnection; import com.sforce.ws.ConnectionException; /** * @author tmichels */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader=AnnotationConfigContextLoader.class, classes={SalesforceAuthenticationConfigImpl.class}) public class SalesforceAuthenticationServiceTest { @Inject @Named("loginToProductionSalesforce") PartnerConnection loginToProductionPartner; @Inject @Named("loginToSandboxSalesforce") PartnerConnection loginToSandboxPartner; @Inject @Named("bulkLoginToProductionSalesforce") BulkConnection loginToProductionBulkConnection; @Inject @Named("bulkLoginToSandboxSalesforce") BulkConnection loginToSandboxBulkConnection; @Inject @Named("loginToSalesforceSandboxEnterprise") EnterpriseConnection loginToSalesforceEnterpriseConnection; @Test public void testLoginToProductionSalesforce() { assertNotNull(loginToProductionPartner.getConfig().getSessionId()); try { loginToProductionPartner.logout(); } catch (ConnectionException e) { e.printStackTrace(); } } @Test public void testLoginToSandboxSalesforce(){ assertNotNull(loginToSandboxPartner.getConfig().getSessionId()); try { loginToSandboxPartner.logout(); } catch (ConnectionException e) { e.printStackTrace(); } } @Test public void testBulkLoginToProductionSalesforce(){ assertNotNull(loginToProductionBulkConnection.getConfig().getSessionId()); } @Test public void testBulkLoginToSandboxSalesforce(){ assertNotNull(loginToSandboxBulkConnection.getConfig().getSessionId()); } @Test public void testLoginToSalesforceEnterprise(){ assertNotNull(loginToSalesforceEnterpriseConnection.getConfig().getSessionId()); } }