java - Java Web 服务客户端中的连接详细信息和超时

标签 java timeout jax-ws jmx java-web-start

我必须为给定的 WSDL 文件实现一个网络服务客户端。 我使用 SDK 的“wsimport”工具从 WSDL 创建 Java 类以及将 web 服务的唯一方法 (enhanceAddress(auth, param, address)) 包装到一个简单的 java 方法中的类。到目前为止,一切都很好。 Web 服务正常运行并正确返回结果。代码如下所示:

try {
  EnhancedAddressList uniservResponse = getWebservicePort().enhanceAddress(m_auth, m_param, uniservAddress);
  //Where the Port^ is the HTTP Soap 1.2 Endpoint
}catch (Throwable e) {
  throw new AddressValidationException("Error during uniserv webservice request.", e);
}

现在的问题:我需要获取有关连接的信息以及可能发生的任何错误,以便填充各种 JMX 值(例如 COUNT_READ_TIMEOUT、COUNT_CONNECT_TIMEOUT,...) 不幸的是,该方法没有正式抛出任何异常,因此为了获取有关 ConnectException 的详细信息,我需要在将抛出的 ClientTransportException 上使用 getCause()

更糟糕的是:我试图测试读取超时值,但没有。我更改了服务在 wsdl 文件中的位置,以将请求发布到一个 php 脚本,该脚本永远等待并且不返回。你猜怎么着:Web 服务客户端不会超时但也会永远等待(我在等待 30 多分钟后终止了该应用程序)。这不是我的应用程序的选项,因为如果其中一些“卡住”,我最终会耗尽 tcp 连接。

enhanceAddress(auth, param, address) 方法未实现,但使用 javax.jws.* 注解,这意味着我无法查看/更改/检查实际执行的代码。

除了扔掉整个 wsimport/javax.jsw-stuff 并实现我自己的 soap 客户端之外,我还有其他选择吗?

最佳答案

要设置读取超时和连接超时,您可以在设置服务和端口实例时配置绑定(bind)参数:


    Service = new Service();

    Port = Service.getPort();

    ((BindingProvider) Port).getRequestContext().put(
            BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
            "http://localhost:8080/service");
    ((BindingProvider) Port).getRequestContext().put(
            BindingProviderProperties.CONNECT_TIMEOUT,
            30);
    ((BindingProvider) Port).getRequestContext().put(
            BindingProviderProperties.REQUEST_TIMEOUT,
            30);

现在,每当您通过“端口”执行服务时,如果后端响应缓慢,您将收到响应超时和/或连接超时。这些值遵循套接字类的超时值。

当超过这些超时时,您将获得超时异常或连接异常,您可以放置​​计数器代码来跟踪您获得了多少。

关于java - Java Web 服务客户端中的连接详细信息和超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3012787/

相关文章:

java - 如何列出特定目录中所有新创建的文件?

java - 使用 ArrayList<ArrayList<String>>() 时 java 中出现意外输出

flash - 如何延长 Flash 应用程序中的默认超时时间?

c# - Dotnet core 2进程启动超时

java - 带有 CXF 和 JAX-WS 的 XmlJavaTypeAdapter

java - Maven jaxws 插件 - 跳过执行

java - Eclipse如何找到JRE或JDK位置?

java - 如何将数据从 Recyclerview 传递到 Fragment

php - PHP/MySQL 查询速度慢。重新考虑请求的帮助。 (160k 和 300 行表长度)

java - Websphere REST 上传 - 不将上传的文件加载到内存中