1. 程式人生 > >webservice調用

webservice調用

webservice的驗證解決方法

第一種辦法:下載apache cxf的包,使用wsdl2java工具生成java客戶端,未能解決帶驗證的問題。

第二種方法:根據wsdl文件生成客戶端,也沒找到解決方法。

最後使用httpclient解決。

public class DynamicHttpclientCall {

private String namespace;

private String methodName;

private String wsdlLocation;

private String soapResponseData;

private String username;

private String password;

private String myWorkStation;

static int socketTimeout = 30000;// 請求超時時間

static int connectTimeout = 30000;// 傳輸超時時間

public DynamicHttpclientCall(String namespace, String methodName,

String wsdlLocation,String username,String password,String myWorkStation) {

this.namespace = namespace;

this.methodName = methodName;

this.wsdlLocation = wsdlLocation;

this.username = username;

this.password = password;

this.myWorkStation = myWorkStation;

}

public HttpClientContext createBasicAuthContext(HttpHost host,String username, String password) {

CredentialsProvider credsProvider = new BasicCredentialsProvider();

Credentials defaultCreds = new UsernamePasswordCredentials(username, password);

credsProvider.setCredentials(new AuthScope(host.getHostName(), host.getPort()), defaultCreds);

AuthCache authCache = new BasicAuthCache();

BasicScheme basicAuth = new BasicScheme();

authCache.put(host, basicAuth);

HttpClientContext context = HttpClientContext.create();

context.setCredentialsProvider(credsProvider);

context.setAuthCache(authCache);

return context;

}

public String invoke(Map<String, String> patameterMap) throws Exception {

//HttpHost host = new HttpHost("piprd.shandongair.com.cn",50000);

//HttpClientContext createBasicAuthContext = createBasicAuthContext(host,username,password);

HttpPost postMethod = new HttpPost(wsdlLocation);

postMethod.setHeader("Content-type", "application/soap+xml; charset=utf-8");

// HttpRequest postMethod = new HttpRequest(wsdlLocation);

String soapRequestData = buildRequestData(patameterMap);

// byte[] bytes = soapRequestData.getBytes("utf-8");

// InputStream inputStream = new ByteArrayInputStream(bytes, 0,bytes.length);

// RequestEntity requestEntity = new InputStreamRequestEntity(inputStream, bytes.length, "application/soap+xml; charset=utf-8");

// postMethod.setRequestEntity(requestEntity);

postMethod.setEntity(new StringEntity(soapRequestData));

HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

// // 設置BasicAuth

CredentialsProvider provider = new BasicCredentialsProvider();

// // Create the authentication scope

AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);

// // Create credential pair,在此處填寫用戶名和密碼

UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password);

// // Inject the credentials

provider.setCredentials(scope, credentials);

// // Set the default credentials provider

httpClientBuilder.setDefaultCredentialsProvider(provider);

// // HttpClient

CloseableHttpClient closeableHttpClient = httpClientBuilder.build();

// httpClient.getParams().setParameter(HttpProtocolParams.HTTP_CONTENT_CHARSET, "utf-8");

// NTCredentials creds = new NTCredentials(username,password,myWorkStation,"");

CloseableHttpResponse execute = closeableHttpClient.execute(postMethod);

int statusCode = execute.getStatusLine().getStatusCode();

String text = IOUtils.toString(execute.getEntity().getContent(), "utf-8");

return text;

}

// public int invoke(Map<String, String> patameterMap) throws Exception {

// PostMethod postMethod = new PostMethod(wsdlLocation);

// String soapRequestData = buildRequestData(patameterMap);

//

// byte[] bytes = soapRequestData.getBytes("utf-8");

// InputStream inputStream = new ByteArrayInputStream(bytes, 0,bytes.length);

// RequestEntity requestEntity = new InputStreamRequestEntity(inputStream, bytes.length, "application/soap+xml; charset=utf-8");

// postMethod.setRequestEntity(requestEntity);

//

//// HttpClient httpClient = new HttpClient();

// // 創建HttpClientBuilder

// HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

//// // 設置BasicAuth

// CredentialsProvider provider = new BasicCredentialsProvider();

//// // Create the authentication scope

// AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);

//// // Create credential pair,在此處填寫用戶名和密碼

// UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(username, password);

//// // Inject the credentials

// provider.setCredentials(scope, credentials);

//// // Set the default credentials provider

// httpClientBuilder.setDefaultCredentialsProvider(provider);

//// // HttpClient

// CloseableHttpClient closeableHttpClient = httpClientBuilder.build();

//

//// httpClient.getParams().setParameter(HttpProtocolParams.HTTP_CONTENT_CHARSET, "utf-8");

//// NTCredentials creds = new NTCredentials(username,password,myWorkStation,"");

//

//

//

// int statusCode = httpClient.executeMethod(postMethod);

// soapResponseData = postMethod.getResponseBodyAsString();

// return statusCode;

// }


private String buildRequestData(Map<String, String> patameterMap) {

StringBuffer soapRequestData = new StringBuffer();

soapRequestData.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:com=\"com:sda:querydata\"><soapenv:Header/>");

soapRequestData.append("<soapenv:Body><com:MT_DD_Request><MSGRP></MSGRP></com:MT_DD_Request></soapenv:Body></soapenv:Envelope>");

// Set<String> nameSet = patameterMap.keySet();

// for (String name : nameSet) {

// soapRequestData.append("<" + name + ">" + patameterMap.get(name)+ "</" + name + ">");

// }

return soapRequestData.toString();

}

}



webservice調用