package test.http;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
/**
* Simulating request webservice
* 模拟请求WEBSERVICE样例
*
*/
public class SimRequestWS {
/**
* 模拟请求WEBSERVICE方法
* @param url 请求的Webservice地址
* @param request 请求的报文,XML格式的字符串
* @return
*/
private myX509TrustManager xtm = new myX509TrustManager();
private myHostnameVerifier hnv = new myHostnameVerifier();
public SimRequestWS() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLSv1.2"); //或SSL、TLS、TLSv1.0、TLSv1.1(jdk1.7开始支持)、TLS1.2(jdk1.7开始支持)S
X509TrustManager[] xtmArray = new X509TrustManager[] {xtm};
sslContext.init(null, xtmArray, new java.security.SecureRandom());
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
if (sslContext != null) {
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
}
HttpsURLConnection.setDefaultHostnameVerifier(hnv);
}
public Map<String,String> doRequestWS(URL url, String request) {
HttpURLConnection connection = null;
String rspMsg = "";
String rspCode = "ERROR";
try {
byte[] requestBuf = (byte[]) null;
requestBuf = request.getBytes("gbk");
connection = (HttpsURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setRequestProperty("Content-Type", "text/plain");
connection.connect();
DataOutputStream out = new DataOutputStream(
connection.getOutputStream());
out.write(requestBuf);
out.flush();
out.close();
if (connection.getResponseCode() != 200) {
System.out.println("ERROR: " + connection.getResponseMessage());
}
InputStream in = connection.getInputStream();
ByteArrayOutputStream bufOut = new ByteArrayOutputStream();
byte[] readBuf = new byte[100];
while (true) {
int ret = in.read(readBuf);
if (ret < 0)
break;
bufOut.write(readBuf, 0, ret);
}
byte[] rspBuf = bufOut.toByteArray();
rspMsg = new String(rspBuf, "gbk");
rspCode = connection.getResponseMessage();
} catch (Exception e) {
e.printStackTrace();
}
connection = null;
Map<String,String> map = new HashMap<String,String>();
map.put("rspCode", rspCode);
map.put("rspMsg", rspMsg);
return map;
}
public static void main(String[] args) throws Exception,
UnsupportedEncodingException {
SimRequestWS test = new SimRequestWS();
test.testNc();
test.testSibel();
}
public static void testNc() throws MalformedURLException{
URL url = new URL("https://10.45.50.185:8443/axis2/services/CallBackServices?wsdl");
SimRequestWS test = new SimRequestWS();
Map<String,String> map =test.doRequestWS(
url,
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:cal=\"http://platform.nucleusconnect.com/wsdl/CallBackServices\">\n" +
" <soapenv:Header>\n" +
" <cal:GetTokeAuthHeaderRequest>\n" +
" <userName>User1</userName>\n" +
" <password>password</password>\n" +
" </cal:GetTokeAuthHeaderRequest>\n" +
" </soapenv:Header>\n" +
" <soapenv:Body>\n" +
" <cal:GetRSPTokenRequest>\n" +
" <header>\n" +
" \t\t<RSP_ID>StarHub Ltd</RSP_ID>\n" +
" <Department>Business Solution - Business Broadband</Department>\n" +
" <TransactionId>NC2015110400001001</TransactionId>\n" +
" </header>\n" +
" </cal:GetRSPTokenRequest>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>"
);
System.out.println(map);
}
public static void testSibel() throws MalformedURLException{
URL url = new URL("https://10.45.48.85:8443/Siebel-2015-11-05/services/QueryPS?wsdl");
SimRequestWS test = new SimRequestWS();
Map<String,String> map =test.doRequestWS(
url,
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:quer=\"http://www.starhub.com/bss/eai/ebs/query\" xmlns:head=\"http://www.starhub.com/bss/eai/ebs/udm/header\">\n" +
" <soapenv:Header/>\n" +
" <soapenv:Body>\n" +
" <quer:reserveResource>\n" +
" <!--Optional:-->\n" +
" <quer:QueryResourceType>\n" +
" <!--Optional:-->\n" +
" <head:TransactionID>1</head:TransactionID>\n" +
" <!--Optional:-->\n" +
" <head:BusinessEvent>1</head:BusinessEvent>\n" +
" <head:ReturnCode>1</head:ReturnCode>\n" +
" <head:ErrorCode>1</head:ErrorCode>\n" +
" <!--Optional:-->\n" +
" <head:ErrorMessage>1</head:ErrorMessage>\n" +
" <!--Optional:-->\n" +
" <head:ExternalSysReturnCode>1</head:ExternalSysReturnCode>\n" +
" <!--Optional:-->\n" +
" <head:ExternalSysErrorCode>1</head:ExternalSysErrorCode>\n" +
" <!--Optional:-->\n" +
" <head:ExternalSysErrorMessage>1</head:ExternalSysErrorMessage>\n" +
" <!--Optional:-->\n" +
" <head:TimeStamp>1</head:TimeStamp>\n" +
" <!--Optional:-->\n" +
" <head:Source>1</head:Source>\n" +
" <ResouceRequest>\n" +
" <!--Optional:-->\n" +
" <SerialNumber>1</SerialNumber>\n" +
" <!--Optional:-->\n" +
" <ResourceTypeClass>1</ResourceTypeClass>\n" +
" <!--Optional:-->\n" +
" <ResourceType>1</ResourceType>\n" +
" <!--Optional:-->\n" +
" <Status>1</Status>\n" +
" <!--Optional:-->\n" +
" <InventoryLocation>1</InventoryLocation>\n" +
" <!--Optional:-->\n" +
" <Numbers>1</Numbers>\n" +
" <!--Optional:-->\n" +
" <Operation>1</Operation>\n" +
" <!--Optional:-->\n" +
" <CustomerName>1</CustomerName>\n" +
" <!--Optional:-->\n" +
" <SHProductAssocTo>1</SHProductAssocTo>\n" +
" <!--Optional:-->\n" +
" <AgingStartDate>1</AgingStartDate>\n" +
" <!--Optional:-->\n" +
" <NetworkProfile>1</NetworkProfile>\n" +
" <!--Optional:-->\n" +
" <Remarks>1</Remarks>\n" +
" </ResouceRequest>\n" +
" </quer:QueryResourceType>\n" +
" </quer:reserveResource>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>"
);
System.out.println(map);
}
/**
* 重写三个方法
* @author Administrator
*
*/
class myX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) {
System.out.println("cert: " + chain[0].toString() + ", authType: " + authType);
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
/**
* 重写一个方法
* @author Administrator
*
*/
class myHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
System.out.println("Warning: URL Host: " + hostname + " vs. " + session.getPeerHost());
return true;
}
}
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
/**
* Simulating request webservice
* 模拟请求WEBSERVICE样例
*
*/
public class SimRequestWS {
/**
* 模拟请求WEBSERVICE方法
* @param url 请求的Webservice地址
* @param request 请求的报文,XML格式的字符串
* @return
*/
private myX509TrustManager xtm = new myX509TrustManager();
private myHostnameVerifier hnv = new myHostnameVerifier();
public SimRequestWS() {
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLSv1.2"); //或SSL、TLS、TLSv1.0、TLSv1.1(jdk1.7开始支持)、TLS1.2(jdk1.7开始支持)S
X509TrustManager[] xtmArray = new X509TrustManager[] {xtm};
sslContext.init(null, xtmArray, new java.security.SecureRandom());
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
if (sslContext != null) {
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
}
HttpsURLConnection.setDefaultHostnameVerifier(hnv);
}
public Map<String,String> doRequestWS(URL url, String request) {
HttpURLConnection connection = null;
String rspMsg = "";
String rspCode = "ERROR";
try {
byte[] requestBuf = (byte[]) null;
requestBuf = request.getBytes("gbk");
connection = (HttpsURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setRequestProperty("Content-Type", "text/plain");
connection.connect();
DataOutputStream out = new DataOutputStream(
connection.getOutputStream());
out.write(requestBuf);
out.flush();
out.close();
if (connection.getResponseCode() != 200) {
System.out.println("ERROR: " + connection.getResponseMessage());
}
InputStream in = connection.getInputStream();
ByteArrayOutputStream bufOut = new ByteArrayOutputStream();
byte[] readBuf = new byte[100];
while (true) {
int ret = in.read(readBuf);
if (ret < 0)
break;
bufOut.write(readBuf, 0, ret);
}
byte[] rspBuf = bufOut.toByteArray();
rspMsg = new String(rspBuf, "gbk");
rspCode = connection.getResponseMessage();
} catch (Exception e) {
e.printStackTrace();
}
connection = null;
Map<String,String> map = new HashMap<String,String>();
map.put("rspCode", rspCode);
map.put("rspMsg", rspMsg);
return map;
}
public static void main(String[] args) throws Exception,
UnsupportedEncodingException {
SimRequestWS test = new SimRequestWS();
test.testNc();
test.testSibel();
}
public static void testNc() throws MalformedURLException{
URL url = new URL("https://10.45.50.185:8443/axis2/services/CallBackServices?wsdl");
SimRequestWS test = new SimRequestWS();
Map<String,String> map =test.doRequestWS(
url,
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:cal=\"http://platform.nucleusconnect.com/wsdl/CallBackServices\">\n" +
" <soapenv:Header>\n" +
" <cal:GetTokeAuthHeaderRequest>\n" +
" <userName>User1</userName>\n" +
" <password>password</password>\n" +
" </cal:GetTokeAuthHeaderRequest>\n" +
" </soapenv:Header>\n" +
" <soapenv:Body>\n" +
" <cal:GetRSPTokenRequest>\n" +
" <header>\n" +
" \t\t<RSP_ID>StarHub Ltd</RSP_ID>\n" +
" <Department>Business Solution - Business Broadband</Department>\n" +
" <TransactionId>NC2015110400001001</TransactionId>\n" +
" </header>\n" +
" </cal:GetRSPTokenRequest>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>"
);
System.out.println(map);
}
public static void testSibel() throws MalformedURLException{
URL url = new URL("https://10.45.48.85:8443/Siebel-2015-11-05/services/QueryPS?wsdl");
SimRequestWS test = new SimRequestWS();
Map<String,String> map =test.doRequestWS(
url,
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:quer=\"http://www.starhub.com/bss/eai/ebs/query\" xmlns:head=\"http://www.starhub.com/bss/eai/ebs/udm/header\">\n" +
" <soapenv:Header/>\n" +
" <soapenv:Body>\n" +
" <quer:reserveResource>\n" +
" <!--Optional:-->\n" +
" <quer:QueryResourceType>\n" +
" <!--Optional:-->\n" +
" <head:TransactionID>1</head:TransactionID>\n" +
" <!--Optional:-->\n" +
" <head:BusinessEvent>1</head:BusinessEvent>\n" +
" <head:ReturnCode>1</head:ReturnCode>\n" +
" <head:ErrorCode>1</head:ErrorCode>\n" +
" <!--Optional:-->\n" +
" <head:ErrorMessage>1</head:ErrorMessage>\n" +
" <!--Optional:-->\n" +
" <head:ExternalSysReturnCode>1</head:ExternalSysReturnCode>\n" +
" <!--Optional:-->\n" +
" <head:ExternalSysErrorCode>1</head:ExternalSysErrorCode>\n" +
" <!--Optional:-->\n" +
" <head:ExternalSysErrorMessage>1</head:ExternalSysErrorMessage>\n" +
" <!--Optional:-->\n" +
" <head:TimeStamp>1</head:TimeStamp>\n" +
" <!--Optional:-->\n" +
" <head:Source>1</head:Source>\n" +
" <ResouceRequest>\n" +
" <!--Optional:-->\n" +
" <SerialNumber>1</SerialNumber>\n" +
" <!--Optional:-->\n" +
" <ResourceTypeClass>1</ResourceTypeClass>\n" +
" <!--Optional:-->\n" +
" <ResourceType>1</ResourceType>\n" +
" <!--Optional:-->\n" +
" <Status>1</Status>\n" +
" <!--Optional:-->\n" +
" <InventoryLocation>1</InventoryLocation>\n" +
" <!--Optional:-->\n" +
" <Numbers>1</Numbers>\n" +
" <!--Optional:-->\n" +
" <Operation>1</Operation>\n" +
" <!--Optional:-->\n" +
" <CustomerName>1</CustomerName>\n" +
" <!--Optional:-->\n" +
" <SHProductAssocTo>1</SHProductAssocTo>\n" +
" <!--Optional:-->\n" +
" <AgingStartDate>1</AgingStartDate>\n" +
" <!--Optional:-->\n" +
" <NetworkProfile>1</NetworkProfile>\n" +
" <!--Optional:-->\n" +
" <Remarks>1</Remarks>\n" +
" </ResouceRequest>\n" +
" </quer:QueryResourceType>\n" +
" </quer:reserveResource>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>"
);
System.out.println(map);
}
/**
* 重写三个方法
* @author Administrator
*
*/
class myX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) {
System.out.println("cert: " + chain[0].toString() + ", authType: " + authType);
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
/**
* 重写一个方法
* @author Administrator
*
*/
class myHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
System.out.println("Warning: URL Host: " + hostname + " vs. " + session.getPeerHost());
return true;
}
}
}
//对地址进行验证
/*private HostnameVerifier hv = new HostnameVerifier(){
public boolean verify(String urlHostName, SSLSession session){
return urlHostName.equals(session.getPeerHost());
}
};*/