web service https client example

import java.io.InputStream;
import java.security.KeyStore;
import java.util.Arrays;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Since Jdk1.5, enumeration is the best way to implement an anti-attack
 * singleton instance.
 * 
 */
public enum WsPort {
    Instance;
    private static Logger log = LoggerFactory.getLogger(WsPort.class);

    @SuppressWarnings("unchecked")
    public <E> E getSSLPort(Class<E> wsImplementationClass, String trustStoreFiltePath, String trustStorePassWord, String wsURLAdress) {
	E port = null;
	try {
	    if (port == null) {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(wsImplementationClass);
		factory.setAddress(RwaCfgUtil.getInstance().getRwaWebServiceProperty(wsURLAdress));
		port = (E) factory.create();
		Client proxy = ClientProxy.getClient(port);
		HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
		HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
		httpClientPolicy.setConnectionTimeout(6000000);
		httpClientPolicy.setReceiveTimeout(6000000);
		conduit.setClient(httpClientPolicy);
		TLSClientParameters tlsParams = conduit.getTlsClientParameters();
		if (tlsParams == null) {
		    tlsParams = new TLSClientParameters();
		}
		tlsParams.setSecureSocketProtocol("SSL");
		tlsParams.setDisableCNCheck(true);
		tlsParams.setTrustManagers(getTrustManagers(trustStoreFiltePath, trustStorePassWord));
		conduit.setTlsClientParameters(tlsParams);
	    }
	} catch (Exception e) {
	    log.error("Init port failed!" + Arrays.toString(e.getStackTrace()));
	}
	return port;
    }

    private TrustManager[] getTrustManagers(String trustStoreFiltePath, String trustStorePassWord) throws AppException {
	try {
	    InputStream fp = null;
	    String alg = TrustManagerFactory.getDefaultAlgorithm();
	    TrustManagerFactory factory = TrustManagerFactory.getInstance(alg);
	    KeyStore ks;
	    try {
		fp = MyManager.class.getClassLoader().getResourceAsStream(CfgUtil.getInstance().getWebServiceProperty(trustStoreFiltePath));
		ks = KeyStore.getInstance("JKS");
		ks.load(fp, CfgUtil.getInstance().getWebServiceProperty(trustStorePassWord).toCharArray());
	    } finally {
		if (fp != null) {
		    fp.close();
		}
	    }
	    factory.init(ks);
	    TrustManager[] tms = factory.getTrustManagers();
	    return tms;
	} catch (Exception e) {
	    e.printStackTrace();
	    throw new AppException(e);
	}
    }
}

你可能感兴趣的:(webservice,CXF,client)