java web请求超时_Java Web服务客户端中的连接详细信息和超时

我必须为给定的WSDL文件实现webservice客户端.

我使用SDK的’wsimport’工具从WSDL创建Java类,以及将webservice唯一的方法(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脚本,该脚本只是永远等待并且不会返回.猜猜看:网络服务客户端没有超时但是也一直等待(我在等待30分钟后杀死了应用程序).这不是我的应用程序的选项,因为我最终用完了tcp连接,如果其中一些被“卡住”.

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

我有什么选择,但要扔掉整个wsimport / javax.jsw-stuff并实现我自己的soap客户端?

解决方法:

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

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,jax-ws,timeout,jmx,java-web-start

来源: https://codeday.me/bug/20191004/1852290.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值