Java访问 webServer请求
方法一 使用httpClient
1.创建 httpClient 客户端
public class httpClientConfig {
public RestTemplate restTemplate() {
return new RestTemplate(httpRequestFactory());
}
public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}
/**
* http链接池
* 服务器返回数据(response)的时间,超过该时间抛出read timeout
* @return
*/
public HttpClient httpClient() {
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
//设置整个连接池最大连接数 根据自己的场景决定
connectionManager.setMaxTotal(50);
//路由是对maxTotal的细分
connectionManager.setDefaultMaxPerRoute(100);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(600000) //服务器返回数据(response)的时间,超过该时间抛出read timeout
.setConnectTimeout(300000)//连接上服务器(握手成功)的时间,超出该时间抛出connect timeout
.setConnectionRequestTimeout(300000)//从连接池中获取连接的超时时间
.build();
return HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.build();
}
}
2.调用httpClient 访问请求
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Accept-Encoding", "");
headers.set("SOAPAction", "");
HttpEntity<String> entity = new HttpEntity<>(request, headers);
String response = restTemplate.restTemplate().postForObject(
"url",
entity,
String.class);
return response;
二 直接引用远程的wsdl文件
public static String getData(String data) {
try {
//直接引用远程的wsdl文件
String path = "http://10.95.8.41:80/csp/jhip/JHIPLIB.SOAP.BS.XmlService.cls";
Service service = new Service();
org.apache.axis.client.Call call = (Call) service.createCall();
call.setTargetEndpointAddress(path);
call.setProperty("axis.connection.timeout", 300000);
call.setOperationName("XMLMessageServer");//WSDL里面描述的接口名称
call.addParameter("Message", XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
String result = (String) call.invoke(new Object[]{data});//给方法传递参数,并且调用方法
return result;
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
return null;