public SSLSocketFactory getSSLSocketFactory(Map<String, Object> connectionInfo, Properties props) throws SSLException {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
            Tr.entry(tc, "getSSLSocketFactory");

        try {
            SSLConfig newConfig = null;
            String contextProvider = null;
            if (props != null && !props.isEmpty()) {
                newConfig = new SSLConfig(props);
                contextProvider = newConfig.getProperty(Constants.SSLPROP_CONTEXT_PROVIDER);
            } else {
                if (connectionInfo == null || connectionInfo.isEmpty()) {
                    connectionInfo = new HashMap<String, Object>();
                    connectionInfo.put(Constants.CONNECTION_INFO_DIRECTION, Constants.DIRECTION_OUTBOUND);
                    if (newConfig == null) {
                        Properties sslProps = getProperties(null, connectionInfo, null, true);
                        newConfig = new SSLConfig(sslProps);
                        contextProvider = sslProps.getProperty(Constants.SSLPROP_CONTEXT_PROVIDER);
                    }
                }
            }

            SSLSocketFactory rc = JSSEProviderFactory.getInstance(contextProvider).getSSLSocketFactory(connectionInfo, newConfig);
            if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                Tr.exit(tc, "getSSLSocketFactory: " + rc);
            return rc;
        } catch (Exception e) {
            FFDCFilter.processException(e, getClass().getName(), "getSSLSocketFactory", this);
            if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                Tr.exit(tc, "The following exception occurred in getSSLSocketFactory().", new Object[] { e });
            throw asSSLException(e);
        }
    }
public SSLSocketFactory getSSLSocketFactory ( Map < String , Object > connectionInfo , Properties props ) throws SSLException { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) Tr . entry ( tc , "getSSLSocketFactory" ) ; try { SSLConfig newConfig = null ; String contextProvider = null ; if ( props != null && ! props . isEmpty ( ) ) { newConfig = new SSLConfig ( props ) ; contextProvider = newConfig . getProperty ( Constants . SSLPROP_CONTEXT_PROVIDER ) ; } else { if ( connectionInfo == null || connectionInfo . isEmpty ( ) ) { connectionInfo = new HashMap < String , Object > ( ) ; connectionInfo . put ( Constants . CONNECTION_INFO_DIRECTION , Constants . DIRECTION_OUTBOUND ) ; if ( newConfig == null ) { Properties sslProps = getProperties ( null , connectionInfo , null , true ) ; newConfig = new SSLConfig ( sslProps ) ; contextProvider = sslProps . getProperty ( Constants . SSLPROP_CONTEXT_PROVIDER ) ; } } } SSLSocketFactory rc = JSSEProviderFactory . getInstance ( contextProvider ) . getSSLSocketFactory ( connectionInfo , newConfig ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) Tr . exit ( tc , "getSSLSocketFactory: " + rc ) ; return rc ; } catch ( Exception e ) { FFDCFilter . processException ( e , getClass ( ) . getName ( ) , "getSSLSocketFactory" , this ) ; if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) Tr . exit ( tc , "The following exception occurred in getSSLSocketFactory()." , new Object [ ] { e } ) ; throw asSSLException ( e ) ; } }
<p>
This method creates an SSLSocketFactory for use by an SSL application or
component. Precedence logic will determine which parameters are used for
creating the SSLSocketFactory. See the JavaDoc for getSSLContext with the
same parameters for more info on the behavior of this API.
</p>
<p>
When Java 2 Security is enabled, access to call this method requires
WebSphereRuntimePermission "getSSLConfig" to be granted.
</p>

@param connectionInfo - This refers to the remote connection information. The
current properties known by the runtime include:
<p>
Example OUTBOUND case (endpoint refers more to protocol used since
outbound names are not well-known):
<ul>
<li>com.ibm.ssl.remoteHost="hostname.ibm.com"</li>
<li>com.ibm.ssl.remotePort="9809"</li>
<li>com.ibm.ssl.direction="outbound"</li>
</ul></p>
<p>
Example INBOUND case (endpoint name matches serverindex endpoint):
<code>
com.ibm.ssl.direction="inbound"
</code></p>
It's highly recommended to supply these properties when possible.
@param props Properties used to configure the SSL socket factory. See {@link Constants} for valid properties.
@return SSLSocketFactory
@throws com.ibm.websphere.ssl.SSLException
@ibm-api