CAMEL-8575: Applied patch to fix Salesforce security login retries, with thanks to Dmitry Lysai
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6e862cc9 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6e862cc9 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6e862cc9 Branch: refs/heads/camel-2.14.x Commit: 6e862cc9496ffa97d491fc355f13986a4ce394ad Parents: 595d1c5 Author: Dhiraj Bokde <dhira...@yahoo.com> Authored: Mon Apr 6 13:28:01 2015 -0700 Committer: Dhiraj Bokde <dhira...@yahoo.com> Committed: Mon Apr 6 13:28:01 2015 -0700 ---------------------------------------------------------------------- .../internal/client/AbstractClientBase.java | 26 ++++++++--------- .../salesforce/RestApiIntegrationTest.java | 30 ++++++++++++++++++++ 2 files changed, 43 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/6e862cc9/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java index a00d289..b0c7442 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java @@ -103,19 +103,6 @@ public abstract class AbstractClientBase implements SalesforceSession.Salesforce protected void doHttpRequest(final ContentExchange request, final ClientResponseCallback callback) { - // use SalesforceSecurityListener for security login retries - try { - final boolean isHttps = HttpSchemes.HTTPS.equals(String.valueOf(request.getScheme())); - request.setEventListener(new SalesforceSecurityListener( - httpClient.getDestination(request.getAddress(), isHttps), - request, session, accessToken)); - } catch (IOException e) { - // propagate exception - callback.onResponse(null, new SalesforceException( - String.format("Error registering security listener: %s", e.getMessage()), - e)); - } - // use HttpEventListener for lifecycle events request.setEventListener(new HttpEventListenerWrapper(request.getEventListener(), true) { @@ -169,6 +156,19 @@ public abstract class AbstractClientBase implements SalesforceSession.Salesforce } }); + // use SalesforceSecurityListener for security login retries + try { + final boolean isHttps = HttpSchemes.HTTPS.equals(String.valueOf(request.getScheme())); + request.setEventListener(new SalesforceSecurityListener( + httpClient.getDestination(request.getAddress(), isHttps), + request, session, accessToken)); + } catch (IOException e) { + // propagate exception + callback.onResponse(null, new SalesforceException( + String.format("Error registering security listener: %s", e.getMessage()), + e)); + } + // execute the request try { httpClient.send(request); http://git-wip-us.apache.org/repos/asf/camel/blob/6e862cc9/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java ---------------------------------------------------------------------- diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java index 9627cf3..e87a21f 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java +++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/RestApiIntegrationTest.java @@ -44,7 +44,14 @@ import org.apache.camel.component.salesforce.dto.generated.Document; import org.apache.camel.component.salesforce.dto.generated.Line_Item__c; import org.apache.camel.component.salesforce.dto.generated.Merchandise__c; import org.apache.camel.component.salesforce.dto.generated.QueryRecordsLine_Item__c; +import org.apache.camel.util.jsse.SSLContextParameters; +import org.eclipse.jetty.client.ContentExchange; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.HttpExchange; +import org.eclipse.jetty.client.RedirectListener; +import org.eclipse.jetty.http.HttpMethods; import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.util.ssl.SslContextFactory; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,6 +66,29 @@ public class RestApiIntegrationTest extends AbstractSalesforceTestBase { private static String testId; @Test + public void testRetry() throws Exception { + SalesforceComponent sf = context().getComponent("salesforce", SalesforceComponent.class); + String accessToken = sf.getSession().getAccessToken(); + + SslContextFactory sslContextFactory = new SslContextFactory(); + sslContextFactory.setSslContext(new SSLContextParameters().createSSLContext()); + HttpClient httpClient = new HttpClient(sslContextFactory); + httpClient.setConnectTimeout(60000); + httpClient.setTimeout(60000); + httpClient.registerListener(RedirectListener.class.getName()); + httpClient.start(); + + ContentExchange logoutGet = new ContentExchange(true); + logoutGet.setURL(sf.getLoginConfig().getLoginUrl() + "/services/oauth2/revoke?token=" + accessToken); + logoutGet.setMethod(HttpMethods.GET); + httpClient.send(logoutGet); + assertEquals(HttpExchange.STATUS_COMPLETED, logoutGet.waitForDone()); + assertEquals(HttpStatus.OK_200, logoutGet.getResponseStatus()); + + doTestGetGlobalObjects(""); + } + + @Test public void testGetVersions() throws Exception { doTestGetVersions(""); doTestGetVersions("Xml");