通过SSLTLS下载Apache CXF wsdl

通过SSLTLS下载Apache CXF wsdl,第1张

通过SSL / TLS下载Apache CXF wsdl

在网上进行了大量研究但没有成功之后,我认为是时候调试cxf API了。那是开源的要点之一,对吗?

因此,我发现cxf不会直接下载wsdl。它通过调用将其委托给wsdl4j

javax.wsdl.xml.WSDLReader.readWSDL(javax.wsdl.xml.WSDLLocator)

哪个电话

javax.wsdl.xml.WSDLLocator.getbaseInputSource()

哪个电话

org.apache.cxf.wsdl11.ResourceManagerWSDLLocator.getInputSource(String, String)

因为ResourceManagerWSDLLocator是第一个方法调用的WSDLLocator。

ResourceManagerWSDLLocator.getInputSource第一行是:

InputStream ins = bus.getExtension(ResourceManager.class).getResourceAsStream(importLocation);

现在,由于ResourceManager是xcf总线的扩展,您可以向其添加更多ResourceResolver,而DefaultResourceManager(实现ResourceManager)将遍历所有已注册的解析器,并使用第一个解析非空值的方法,您只需要添加ResourceResolver到ResourceManager。

我最终的工作客户端应用程序是:

package com.mycompany;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import javax.net.ssl.KeyManager;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.TrustManager;import javax.net.ssl.TrustManagerFactory;import javax.xml.namespace.QName;import org.apache.cxf.Bus;import org.apache.cxf.BusFactory;import org.apache.cxf.configuration.jsse.TLSClientParameters;import org.apache.cxf.endpoint.Client;import org.apache.cxf.frontend.ClientProxy;import org.apache.cxf.resource.ResourceManager;import org.apache.cxf.resource.ResourceResolver;import org.apache.cxf.transport.http.HTTPConduit;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.conn.scheme.Scheme;import org.apache.http.conn.scheme.SchemeRegistry;import org.apache.http.conn.ssl.SSLSocketFactory;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.impl.conn.BasicClientConnectionManager;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpParams;public class CxfClientSslTest {    public static void main(String[] args) {        try { Bus bus = BusFactory.getThreadDefaultBus(); ResourceManager extension = bus.getExtension(ResourceManager.class); extension.addResourceResolver(new ResourceResolver() {     @Override     public <T> T resolve(String resourceName, Class<T> resourceType) {         System.out.println("resourceName: " + resourceName + " - resourceType: " + resourceType);         return null;     }     @Override     public InputStream getAsStream(String name) {         try {  if (!name.startsWith("https")) {      return null;  }  SSLSocketFactory sslSocketFactory = SslUtil.getSslSocketFactory();  SchemeRegistry schemeRegistry = new SchemeRegistry();  schemeRegistry.register(new Scheme("https", 8443, sslSocketFactory));  final HttpParams httpParams = new BasicHttpParams();  DefaultHttpClient httpClient = new DefaultHttpClient(new BasicClientConnectionManager(schemeRegistry), httpParams);  HttpGet get = new HttpGet(name);  HttpResponse response = httpClient.execute(get);  return response.getEntity().getContent();         } catch (Exception e) {  return null;         }     } }); QName SERVICE_NAME = new QName("http://server/schemas/services", "MyService"); URL wsdlURL = new URL("https://localhost:8443/services/MyService?wsdl"); MyService ss = new MyService(wsdlURL, SERVICE_NAME); MyServicePortType port = ss.getMyServicePort(); tslIt(port); IdHolder mensagem = new IdHolder(); mensagem.setId(1L); MyDataObject dataObject = port.getById(mensagem); System.out.println("Id: " + dataObject.getId());        } catch (Exception e) { e.printStackTrace();        }    }    public static void tslIt(MyServicePortType port) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException {        Client client = ClientProxy.getClient(port);        HTTPConduit http = (HTTPConduit) client.getConduit();        TLSClientParameters tlsClientParameters = http.getTlsClientParameters();        KeyStore keyStore = getKeyStore();        KeyStore trustStore = getTrustStore();        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());        keyManagerFactory.init(keyStore, "123456".toCharArray());        KeyManager[] keyMgrs = keyManagerFactory.getKeyManagers();        tlsClientParameters.setKeyManagers(keyMgrs);        trustManagerFactory.init(trustStore);        TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();        tlsClientParameters.setTrustManagers(trustManagers);        tlsClientParameters.setDisableCNCheck(true);    }    public static KeyStore getKeyStore() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {        URL keyStoreUrl = CxfClientSslTest.class.getResource("/certs/client.jks");        File keystoreFile = new File(keyStoreUrl.getPath());        if (!keystoreFile.exists()) { throw new RuntimeException("keystore doesn't exists: " + keystoreFile.getAbsolutePath());        }        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());        InputStream keystoreInput = new FileInputStream(keystoreFile.getAbsolutePath());        keystore.load(keystoreInput, "changeit".toCharArray());        keystoreInput.close();        return keystore;    }    public static KeyStore getTrustStore() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {        URL trustStoreUrl = CxfClientSslTest.class.getResource("/certs/client-trust.jks");        File trustStoreFile = new File(trustStoreUrl.getPath());        if (!trustStoreFile.exists()) { throw new RuntimeException("truststore doesn't exists: " + trustStoreFile.getAbsolutePath());        }        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());        InputStream trustStoreInput = new FileInputStream(trustStoreFile.getAbsolutePath());        trustStore.load(trustStoreInput, "changeit".toCharArray());        trustStoreInput.close();        return trustStore;    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5502140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存