public static String cxfWsdl(WebServiceVO vo, String url, String caseNameSpace) {
String result = null;
log.info("WebService Info: param - [{}], url - [{}]", JSONObject.toJSONString(vo), url);
HTTPConduitConfigurer httpConduitConfigurer = (name, address, c) -> {
// location 重定向
c.getTarget().getAddress().setValue(url.replace("?wsdl",""));
// 设置超时
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(10000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setReceiveTimeout(60000);
c.setClient(httpClientPolicy);
// https处理
TLSClientParameters params = c.getTlsClientParameters();
if (params == null) {
params = new TLSClientParameters();
}
params.setHostnameVerifier(new TrustAnyHostnameVerifier());
params.setTrustManagers(new TrustManager[]{new TrustAllManager()});
params.setDisableCNCheck(true);
c.setTlsClientParameters(params);
};
Bus bus = BusFactory.getThreadDefaultBus();
bus.setExtension(httpConduitConfigurer, HTTPConduitConfigurer.class);
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(bus);
Client client = dcf.createClient(url);
Object[] objects;
try {
if (StringUtils.isNotBlank(caseNameSpace)) {
QName operationName = new QName(caseNameSpace, vo.getMethodName());
objects = client.invoke(operationName, vo.getParameters());
} else {
objects = client.invoke(vo.getMethodName(), vo.getParameters());
}
if (objects != null && objects.length > 0) {
result = objects[0].toString().replaceAll("\r\n", "");
}
} catch (Exception e) {
log.error("请求WS接口出错!", e);
}
return result;
}
public static class TrustAllManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
// Do Nothing
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
public static class TrustAnyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
// 直接返回true
return true;
}
}
CXF 处理WS https及接口地址address location不一致问题
于 2023-03-23 11:42:36 首次发布