HTTP传输错误:java.net.ConnectException:连接超时:在Soap ws客户端中连接

时间:2018-10-18 09:49:25

标签: java soap jax-ws webservice-client

在我开发的JAR客户端中,当尝试使用jax-ws调用soap ws时,出现连接超时异常,我想知道导致此异常的原因是什么。 我正在使用远程wsdl和必须在VM参数中运行的https的服务器证书。

   -Djavax.net.debug=all
   -Djavax.net.ssl.trustStore=link to my certifacte

如何使用此参数运行? 通过添加eclipse.ini文件? 感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

1。从项目浏览器窗格中选择您的项目,通常在左侧 Step 1

2。在“运行”菜单中,根据您是要运行它还是对其进行调试,请单击“运行”或“调试” Step 2

3。在左窗格中,选择“ Java应用程序,然后右键单击并单击新建” enter image description here

4。由于您已经选择了项目,并且它包含一个“ Main”类,因此它将“运行/调试”配置“ Name”默认为该类名。如果您有多个Main,则可能必须单击Search(搜索)按钮或手动输入软件包的路径和类名 Step 4

5。如图所示,在“ VM arguments”下输入您的参数 Step 5

6。单击“应用”,或者单击“应用并运行”(如果要立即运行)

一些说明,您可能需要密钥库的完整路径,例如:
-Djavax.net.ssl.trustStore=C:\ADirectory\AnotherDirectory\FinalDirectoryThatContainsYourKeystore\TrustStore.jks

-Djavax.net.debug=all-将打开大量调试,如果您不习惯阅读它,可能会造成混淆。如果连接正常,则删除该行。如果连接不起作用,那就是所有调试都有用的时候。

更新:要进一步解决HTTP连接问题,当它是SOAP请求的核心时,请暂时删除-Djavax.net.debug=all并添加以下内容:
-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
-Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=true
-Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true
-Dcom.sun.xml.internal.ws.transport.http.HttpAdapter.dump=true

这将向您显示HTTP标头,响应代码,请求和响应正文内容。它还会显示您尝试连接的URL。

答案 1 :(得分:1)

添加其他疑难解答答案。一种测试SSL连接的好方法。来源:4ndrej awesome SSL Poke GitHUB example

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

/** Establish a SSL connection to a host and port, writes a byte and
 * prints the response. See
 * http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services
 * 
 * JGlass: Code modified for SO to hard code the host and port
 * 
 */
public class SSLPoke {
    public static void main(String[] args) {

        //add the full FQDN to the host here
        String host = "google.com";
        //your port may be 443
        int port = 8443;

        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(host, port);

            InputStream in = sslsocket.getInputStream();
            OutputStream out = sslsocket.getOutputStream();

            // Write a test byte to get a reaction :)
            out.write(1);

            while (in.available() > 0) {
                System.out.print(in.read());
            }
            System.out.println("Successfully connected");

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}


如果一切正常,您将获得“成功连接”