Клиент, разработанный на Java с использованием JDK 1.6. Я использую API в коде Java. Всякий раз, когда я обращаюсь к этому API из soapui или из JDK 1.7, он работает отлично, но когда я пытался поразить этот API с помощью JDK 1.6, он возвращает ошибку.
com.sun.xml.internal.ws.client.ClientTransportException: ошибка транспорта HTTP: java.net.SocketException: сброс подключения.
Я пытался при разработке клиента с использованием WSDL и HTTPSURLConnection с обоими механизмами, я получаю ту же ошибку. Кажется, нет ничего плохого в коде. Я не могу найти способ разрешения.
Wireshark Результат:
Когда я запустил jar из JDK 1.7, я вижу результат в Wireshark, протокол TSLv1, но когда я попытался запустить jar из 1.6, протокол был изменен на SSLv2.
Можно ли изменить протокол в коде или в системе, где мы вызываем jar?
Вот мой код:
public String myFun(String sender) throws IOException,
NoSuchAlgorithmException, KeyManagementException{
SSLContext sslContext = SSLContext.getInstance("SSL");
TrustManager[] trustManager = getTrustManager();
sslContext.init(null, trustManager, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
try{
String inquiryRequest = inquiryRequest = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:v5=\"http://xxxxxxx\">\n"
+"<soapenv:Header>\n"
+"</soapenv:Header>\n"
+"<soapenv:Body>\n"
+"<v5:single.smsReq>\n"
+"<sender>"+sender+"</sender>\n"
+"</v5:single.smsReq>\n"
+"</soapenv:Body>\n"
+"</soapenv:Envelope>";
URL url =new URL ("https://xxxx:xx/xx");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("content-type","application/xml");
conn.setRequestProperty("Authorization","Basic xxx");
conn.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(inquiryRequest);
wr.flush();
wr.close();
BufferedReader in = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
conn.disconnect();
return response.toString();
}catch(Exception e){
return null;
}
}
private TrustManager[] getTrustManager() {
TrustManager[] certs = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String t) {
}
public void checkServerTrusted(X509Certificate[] certs, String t) {
}
}
};
return certs;
}