[teiid-commits] teiid SVN: r3456 - branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Sep 7 16:04:39 EDT 2011


Author: mdrillin
Date: 2011-09-07 16:04:39 -0400 (Wed, 07 Sep 2011)
New Revision: 3456

Added:
   branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceHandlerResolver.java
Modified:
   branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java
Log:
TEIID-1733 - Update of the salesforce connector to api v22

Modified: branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java
===================================================================
--- branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java	2011-09-07 20:03:56 UTC (rev 3455)
+++ branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java	2011-09-07 20:04:39 UTC (rev 3456)
@@ -29,6 +29,9 @@
 import javax.resource.ResourceException;
 import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.ws.BindingProvider;
+import javax.xml.ws.handler.Handler;
+import javax.xml.ws.handler.HandlerResolver;
+import javax.xml.ws.handler.PortInfo;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
@@ -82,7 +85,7 @@
 	
 	String getUserName() throws ResourceException {
 			try {
-				return sfSoap.getUserInfo(sh).getUserName();
+				return sfSoap.getUserInfo().getUserName();
 			} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
 				throw new ResourceException(e);
 			}
@@ -110,9 +113,17 @@
 			BusFactory.setThreadDefaultBus(mcf.getBus());
 			try {
 				sfService = new SforceService();
+				sh = new SessionHeader();
+				
+				// Session Id must be passed in soapHeader - add the handler
+				sfService.setHandlerResolver(new SalesforceHandlerResolver(sh));
+				
 				sfSoap = sfService.getSoap();
 				((BindingProvider)sfSoap).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url.toExternalForm());
 				loginResult = sfSoap.login(username, password);
+				
+				// Set the SessionId after login, for subsequent calls
+				sh.setSessionId(loginResult.getSessionId());
 			} catch (LoginFault e) {
 				throw new ResourceException(e);
 			} catch (InvalidIdFault e) {
@@ -123,9 +134,7 @@
 				BusFactory.setThreadDefaultBus(bus);
 			}
 			LogManager.logTrace(LogConstants.CTX_CONNECTOR, "Login was successful for username " + username); //$NON-NLS-1$
-
-			sh = new SessionHeader();
-			sh.setSessionId(loginResult.getSessionId());
+						
 			// Reset the SOAP endpoint to the returned server URL
 			((BindingProvider)sfSoap).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,loginResult.getServerUrl());
 			// or maybe org.apache.cxf.message.Message.ENDPOINT_ADDRESS
@@ -136,7 +145,7 @@
 			
 			// Test the connection.
 			try {
-				sfSoap.getUserInfo(sh);
+				sfSoap.getUserInfo();
 			} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
 				throw new ResourceException(e);
 			}
@@ -150,7 +159,7 @@
 			result = false;
 		} else {
 			try {
-				sfSoap.getServerTimestamp(sh);
+				sfSoap.getServerTimestamp();
 			} catch (Throwable t) {
 				LogManager.logTrace(LogConstants.CTX_CONNECTOR, "Caught Throwable in isAlive", t); //$NON-NLS-1$
 				result = false;
@@ -171,12 +180,12 @@
 		qo.setBatchSize(batchSize);
 		try {
 			if(queryAll != null && queryAll) {
-				qr = sfSoap.queryAll(queryString, sh);
+				qr = sfSoap.queryAll(queryString);
 			} else {
 				MruHeader mruHeader = partnerFactory.createMruHeader();
 				mruHeader.setUpdateMru(false);
 				
-				qr = sfSoap.query(queryString, sh);
+				qr = sfSoap.query(queryString);
 			}
 		} catch (InvalidFieldFault e) {
 			throw new ResourceException(e);
@@ -198,7 +207,7 @@
 		QueryOptions qo = partnerFactory.createQueryOptions();
 		qo.setBatchSize(batchSize);
 		try {
-			return sfSoap.queryMore(queryLocator, sh);
+			return sfSoap.queryMore(queryLocator);
 		} catch (InvalidFieldFault e) {
 			throw new ResourceException(e);
 		} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
@@ -212,7 +221,7 @@
 	public int delete(String[] ids) throws ResourceException {
 		List<DeleteResult> results = null;
 		try {
-			results = sfSoap.delete(Arrays.asList(ids), sh);
+			results = sfSoap.delete(Arrays.asList(ids));
 		} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
 			throw new ResourceException(e);
 		}
@@ -250,7 +259,7 @@
 		objects.add(toCreate);
 		List<SaveResult> result;
 		try {
-			result = sfSoap.create(objects, sh);
+			result = sfSoap.create(objects);
 		} catch (InvalidFieldFault e) {
 			throw new ResourceException(e);
 		} catch (com.sforce.soap.partner.InvalidSObjectFault e) {
@@ -275,7 +284,7 @@
 		}
 		List<SaveResult> result;
 			try {
-				result = sfSoap.update(params, sh);
+				result = sfSoap.update(params);
 			} catch (InvalidFieldFault e) {
 				throw new ResourceException(e);
 			} catch (com.sforce.soap.partner.InvalidSObjectFault e) {
@@ -300,7 +309,7 @@
 	public UpdatedResult getUpdated(String objectType, XMLGregorianCalendar startDate, XMLGregorianCalendar endDate) throws ResourceException {
 			GetUpdatedResult updated;
 			try {
-				updated = sfSoap.getUpdated(objectType, startDate, endDate, sh);
+				updated = sfSoap.getUpdated(objectType, startDate, endDate);
 			} catch (com.sforce.soap.partner.InvalidSObjectFault e) {
 				throw new ResourceException(e);
 			} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
@@ -316,7 +325,7 @@
 			XMLGregorianCalendar endCalendar) throws ResourceException {
 			GetDeletedResult deleted;
 			try {
-				deleted = sfSoap.getDeleted(objectName, startCalendar, endCalendar, sh);
+				deleted = sfSoap.getDeleted(objectName, startCalendar, endCalendar);
 			} catch (com.sforce.soap.partner.InvalidSObjectFault e) {
 				throw new ResourceException(e);
 			} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
@@ -342,7 +351,7 @@
 	
 	public  QueryResult retrieve(String fieldList, String sObjectType, List<String> ids) throws ResourceException {
 		try {
-			List<SObject> objects = sfSoap.retrieve(fieldList, sObjectType, ids, sh);
+			List<SObject> objects = sfSoap.retrieve(fieldList, sObjectType, ids);
 			QueryResult result = new QueryResult();
 			for (SObject sObject : objects) {
 			    if (sObject != null) {
@@ -368,7 +377,7 @@
 
 	public DescribeGlobalResult getObjects() throws ResourceException {
 		try {
-			return sfSoap.describeGlobal(sh);
+			return sfSoap.describeGlobal();
 		} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
 			throw new ResourceException(e);
 		}
@@ -376,7 +385,7 @@
 
 	public DescribeSObjectResult getObjectMetaData(String objectName) throws ResourceException {
 		try {
-			return sfSoap.describeSObject(objectName, sh);
+			return sfSoap.describeSObject(objectName);
 		} catch (com.sforce.soap.partner.InvalidSObjectFault e) {
 			throw new ResourceException(e);
 		} catch (com.sforce.soap.partner.UnexpectedErrorFault e) {
@@ -392,6 +401,5 @@
 	@Override
 	public boolean isAlive() {
 		return isValid();
-	}	
-
+	}
 }

Added: branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceHandlerResolver.java
===================================================================
--- branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceHandlerResolver.java	                        (rev 0)
+++ branches/7.4.x/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceHandlerResolver.java	2011-09-07 20:04:39 UTC (rev 3456)
@@ -0,0 +1,85 @@
+package org.teiid.resource.adapter.salesforce;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPHeaderElement;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPPart;
+import javax.xml.ws.handler.Handler;
+import javax.xml.ws.handler.HandlerResolver;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.PortInfo;
+import javax.xml.ws.handler.soap.SOAPHandler;
+import javax.xml.ws.handler.soap.SOAPMessageContext;
+
+import com.sforce.soap.partner.SessionHeader;
+
+/* Handler which adds the SessionId info to the SOAP Header
+ * 
+ */
+class SalesforceHandlerResolver implements HandlerResolver {
+
+	private SalesforceHeaderHandler headerHandler = null;
+
+	public SalesforceHandlerResolver(SessionHeader sh) {
+		this.headerHandler = new SalesforceHeaderHandler(sh);
+	}
+
+	public List<Handler> getHandlerChain(PortInfo portInfo) {
+		List<Handler> handlerChain = new ArrayList<Handler>();
+
+		handlerChain.add(this.headerHandler);
+
+		return handlerChain;
+	}
+	
+	class SalesforceHeaderHandler implements SOAPHandler<SOAPMessageContext> {
+
+		SessionHeader sh = null;
+
+	    public SalesforceHeaderHandler(SessionHeader sh) {
+			this.sh = sh;
+		}
+
+	    public boolean handleMessage(SOAPMessageContext smc) {
+	    	QName sessionHeader = new QName("urn:partner.soap.sforce.com", "SessionHeader");  //$NON-NLS-1$ //$NON-NLS-2$
+	    	QName sessionId = new QName("urn:partner.soap.sforce.com", "sessionId");
+	     	try {
+	     		// If the SessionHeader is null, or the session id is null - do nothing.
+	     		if (sh!=null && sh.getSessionId()!=null) {
+	     			SOAPMessage message = smc.getMessage();
+	     			SOAPPart part = message.getSOAPPart();
+	     			SOAPEnvelope envelope = part.getEnvelope();
+	     			SOAPHeader header = envelope.getHeader();
+	     			if (header == null) header = envelope.addHeader();
+	     			SOAPHeaderElement sessionHeaderElement = header.addHeaderElement(sessionHeader);
+	     			SOAPElement sessionIdElement = sessionHeaderElement.addChildElement(sessionId);
+	     			sessionIdElement.addTextNode(sh.getSessionId());
+	     		}
+
+			} catch (SOAPException e) {
+				e.printStackTrace();
+				return false;
+			}
+	    	return true;
+	    }
+
+		public Set getHeaders() {
+	        return null;
+	    }
+
+	    public boolean handleFault(SOAPMessageContext context) {
+	        return true;
+	    }
+
+	    public void close(MessageContext context) {
+	    }
+	}
+}



More information about the teiid-commits mailing list