Symptom
When using Salesforce in mappings or processes, the delivery execution produces an error similar to this one:
com.indy.engine.common.exceptions.EngineExceptionI: Error during login at com.indy.engine.addons.salesforce.SForceBaseActionCodeI.connect(SForceBaseActionCodeI.java:126) at com.indy.engine.addons.salesforce.SForceToXmlActionCodeI.executeSimpleCode(SForceToXmlActionCodeI.java:44) at com.indy.engine.action.common.ActionCodeTypeI.executeCode(SourceFile:1646) at com.indy.engine.action.common.ActionCodeTypeI.run(SourceFile:1805) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.Exception: Error during connection to: https://test.salesforce.com/services/Soap/u/26.0endPoint, with login: <......>, and securityToken: null at com.stambia.salesforce.connector.SalesForceConnection.login(SalesForceConnection.java:166) at com.stambia.salesforce.connector.SalesForceBulkConnection.login(SalesForceBulkConnection.java:339) at com.indy.engine.addons.salesforce.SForceBaseActionCodeI.connect(SForceBaseActionCodeI.java:123) ... 4 more Caused by: com.sforce.ws.ConnectionException: Failed to parse detail: START_TAG seen ...</sf:exceptionMessage><sf:upgradeURL>... @1:836 due to: com.sforce.ws.ConnectionException: unable to find end tag at: START_TAG seen ...</sf:exceptionMessage><sf:upgradeURL>... @1:836 at com.sforce.ws.transport.SoapConnection.parseDetail(SoapConnection.java:237) at com.sforce.ws.transport.SoapConnection.createException(SoapConnection.java:203) at com.sforce.ws.transport.SoapConnection.receive(SoapConnection.java:149) at com.sforce.ws.transport.SoapConnection.send(SoapConnection.java:98) at com.sforce.soap.partner.PartnerConnection.login(PartnerConnection.java:1) at com.sforce.soap.partner.PartnerConnection.<init>(PartnerConnection.java:1) at com.stambia.salesforce.connector.SalesForceConnection.login(SalesForceConnection.java:157) ... 6 more
Solution
This error can be raised when the Java Virtual Machine does not support the TLS 1.1 protocol, required by Salesforce.
Java version 1.6 and version prior to 1.7.0.71 are generally concerned, some other versions may be concerned too, depending on how they are packaged or configured.
=> Upgrade to the latest Java 7 or Java 8, or enable the missing protocol as described here.
How to check that a java version supports TLS 1.1 :
- Execute a process with a Beanshell Scripting action
import javax.net.ssl.*; SSLParameters sslParameters; sslParameters = SSLContext.getDefault().getDefaultSSLParameters(); String varname = "/PROTOCOL "; String[] vals = sslParameters.getProtocols(); for (String val: vals) { __ctx__.publishVariable(varname+val, "OK"); }
- After execution, the view "Session Variables" will show the list of available protocols, "PROTOCOL TLSv1.1" should be listed.