Hi guys, there is some points in Web Services that i'm missing.

I generated a web Service java project using cxf's tool "WSDLTOJAVA"  from
wsdl file that i have on my hard drive. But there is also online version of
this wsdl file on my server.

So now I want to consume this web service, but my server uses SSL protocol,
so I need to establish SSL connection, OKAY.

For that I created a new Class which will return me my service interface,
here is the code:

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class MainService<T> {

        private String S_LOCATON;
        
        private Class<T> S_CLASS;
        
        public MainService(String ad, Class<T> sClass){
                this.S_LOCATON = ad;
                this.S_CLASS = sClass;
        }
        
        public T getService(){
                JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
                factory.setServiceClass(this.SERVICE_CLASS); 
                factory.setAddress(this.SERVICE_ADDRESS);
                return (T) factory.create();
        }
        
}

I also created new class for SSL connection:

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;

import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;

import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.transport.http.HTTPConduit;

public class secureConnection{
        
        public secureConnection(Object service, KeyStore keyStore, String 
keyPass,
KeyStore trustedStore){
                
             this.setConnection(service, keyStore, keyPass, trustedStore);
                
        }
        
        public secureConnection(Object service, KeyManager[] p_keyManager,
TrustManager[] p_trustedManager){
                
                this.setConnection(service, p_keyManager, p_trustedManager);
                
        }
        
        private void setConnection(Object service, KeyStore keyStore, String
keyPass, KeyStore trustedStore){
        
               KeyManager[] myKeyManagers = getKeyManagers(keyStore,
keyPass);
               TrustManager[] myTrustStoreKeyManagers =
getTrustManagers(trustedStore);
         
               this.setConnection(service, myKeyManagers,
myTrustStoreKeyManagers);
                
        }
        private void setConnection(Object service, KeyManager[] p_keyManager,
TrustManager[] p_trustedManager){
                HTTPConduit httpConduit = (HTTPConduit)
ClientProxy.getClient(service).getConduit();

                TLSClientParameters tlsCP = new TLSClientParameters();
        
                tlsCP.setKeyManagers(p_keyManager);
                tlsCP.setTrustManagers(p_trustedManager);
        
                tlsCP.setDisableCNCheck(true);
 
                httpConduit.setTlsClientParameters(tlsCP);
                
        }
    private static TrustManager[] getTrustManagers(KeyStore trustStore) 
        throws NoSuchAlgorithmException, KeyStoreException {
        String alg = KeyManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory fac = TrustManagerFactory.getInstance(alg);
        fac.init(trustStore);
        return fac.getTrustManagers();
    }
        
    private static KeyManager[] getKeyManagers(KeyStore keyStore, String
keyPassword) 
        throws GeneralSecurityException, IOException {
        String alg = KeyManagerFactory.getDefaultAlgorithm();
        char[] keyPass = keyPassword != null
                     ? keyPassword.toCharArray()
                     : null;
        KeyManagerFactory fac = KeyManagerFactory.getInstance(alg);
        fac.init(keyStore, keyPass);
        return fac.getKeyManagers();
    }
}

In my test class i'm doing something like this:

String wsAdresse = "https://myserver.com/myWebServiceSOAP";;
MainService<MyService> myServiceFactory = new
MainService<MyService>(wsAdresse, MyService.class);
MyService aService = myServiceFactory.getService();

... I create all key stores and trusted store that I need... and I do this:

new secureConnection(aService , keyStore, keyPassword, trustStore);

... and after that i'm consumming my WS without problems.

But I realized that my MainService class is useless, becase what WsdlToJava
generates contains already some method to return myService.

So I tried something like this:

URL WSDL_LOC = new URL("https://myserver.com/myWebServiceSOAP?wsdl";);   
MyService_Service myWs = new MyService_Service (WSDL_LOC);
MyService aService = myWs.getMyServiceSoap();

At this point I have SSL issues. And to be able to use secureConnection
method, I need aService instance..

So I don't get it....
If anyone can explain me, thanks? 



--
View this message in context: 
http://cxf.547215.n5.nabble.com/SSL-Connection-before-consuming-WS-tp5718587.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to