/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.modelgenerator.salesforce.connection.impl; 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); } @Override 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; } @Override 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"); //$NON-NLS-1$ //$NON-NLS-2$ 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; } @Override public Set getHeaders() { return null; } @Override public boolean handleFault( SOAPMessageContext context ) { return true; } @Override public void close( MessageContext context ) { } } }