[英]Java- SOAP Web service over Https
I am very new in SOAP with https .One of my projects requires making a SOAP call to access a web service over HTTPS. 我对使用https的SOAP非常陌生。我的一个项目需要进行SOAP调用以通过HTTPS访问Web服务。
the service provider only gave us three file .jks, .p12. 服务提供商只给了我们三个文件.jks,.p12。 and one code sample. 和一个代码示例。 .txt file my first question is it possible to call Webservice without WSDL file.? .txt文件我的第一个问题是可以在没有WSDL文件的情况下调用Webservice吗?
and I wrote the following client code with the help of sample code which service provider gave me . 并且我在服务提供商给我的示例代码的帮助下编写了以下客户端代码。
but I getting this error message : java.net.SocketException: Socket is not connected: connect 但我收到此错误消息:java.net.SocketException:套接字未连接:connect
package javaapplication7;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.security.KeyStore;
import java.security.KeyStore.SecretKeyEntry;
import javax.crypto.SecretKey;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
/**
*
* @author dhanish
*/
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try
{
String keyPath = "C:\\key.jks";
String keyPass = "xxx";
String keyType = "JKS";
//path to SSL keystore
System.setProperty("javax.net.ssl.keyStore", keyPath);
System.setProperty("javax.net.ssl.keyStorePassword", keyPass);
System.setProperty("javax.net.ssl.keyStoreType", keyType);
//build the XML to post
String xmlString = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:req=\"http://olp.sadad.com/sadadpaymentmanagement/service/olppaymentmanager/req\">";
xmlString = xmlString + "\n" + "<soapenv:Header/><soapenv:Body>";
xmlString = xmlString + "\n" + "<initiatePaymentDetailsReq>";
xmlString = xmlString + "\n" + "<olpIdAlias>xxxx</olpIdAlias>";
xmlString = xmlString + "\n" + "<merchantId>xxxx</merchantId>";
xmlString = xmlString + "\n" + "<merchantRefNum>2016081870001</merchantRefNum>";
xmlString = xmlString + "\n" + "<paymentAmount>100</paymentAmount>";
xmlString = xmlString + "\n" + "<paymentCurrency>SAR</paymentCurrency>";
xmlString = xmlString + "\n" + "<dynamicMerchantLandingURL>http://sweetroomksa.com/index.php?route=payment/custom/confirm</dynamicMerchantLandingURL>";
xmlString = xmlString + "\n" + "<dynamicMerchantFailureURL>#</dynamicMerchantFailureURL>";
xmlString = xmlString + "\n" + "</initiatePaymentDetailsReq>";
xmlString = xmlString + "\n" + "</soapenv:Body></soapenv:Envelope>";
//post XML over HTTPS
URL url = new URL("https://xxx.xxx.com/soap?service=RB_OLP_INITIATE_PAYMENT"); //replace
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput( true );
connection.setRequestProperty( "Content-Type", "text/xml" );
connection.setHostnameVerifier(new HostnameVerifier()
{
public boolean verify(String hostname, SSLSession session)
{
return true;
}
});
connection.connect();
//tell the web server what we are sending
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
writer.write(xmlString);
writer.flush();
writer.close();
// reading the response
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
StringBuilder buf = new StringBuilder();
char[] cbuf = new char[ 2048 ];
int num;
while ( -1 != (num=reader.read( cbuf )))
{
buf.append( cbuf, 0, num );
}
String result = buf.toString();
System.out.println(result);
}
catch(Exception e)
{
System.out.println(e.getCause());
e.printStackTrace();
}
}
}
null
java.net.SocketException: Socket is not connected: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:656)
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1104)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:998)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at javaapplication7.JavaApplication7.main(JavaApplication7.java:78)
can anyone help me findout what is the error is.? 谁能帮助我找出错误所在?
i found what the error is and solved it. 我找到了错误所在并解决了。 the reason of this error SSL port (default is 443) is not open on server's firewall. 此错误的原因SSL端口(默认为443)未在服务器的防火墙上打开。 so i contact the service company .i gave my static public IP to them . 因此,我与服务公司联系。我向他们提供了我的静态公共IP。 gave me access permission 授予我访问权限
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.