当前位置: 首页 > 面试题库 >

Java Web Service客户端中的连接详细信息和超时

壤驷敏学
2023-03-14
问题内容

我必须为给定的WSDL文件实现一个Web服务客户端。我使用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的详细信息,我需要getCause()ClientTransportException将被抛出的上使用。

更糟糕的是:我尝试测试读取超时值,但是没有。我更改了wsdl文件中服务的位置,以将请求发布到仅等待永远且不会返回的php脚本中。你猜怎么着:Web服务客户端确实
没有
时间了,但永远等待,以及(我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);

现在,无论何时通过“端口”执行服务,如果后端响应速度较慢,您都将获得响应超时和/或连接超时。这些值遵循套接字类的超时值。

当超过这些超时时,您将收到超时异常或连接异常,并且可以放入计数器代码来跟踪获得的计数。



 类似资料:
  • 我在Amazon EC2上设置了一个2节点hazelcast集群。在其中一个节点上,我有一个连接到集群并运行原子长计数器增量的客户端程序 如何找出客户端连接并运行增量AndGet操作的Hazelcast服务器节点? 谢谢

  • 问题内容: 我在ElastiCache上运行Redis集群。 多个进程连接到Redis集群。每个进程都位于Docker容器中。流程不尽相同-我有一个流程,一个流程等。 正常运行几天后,连接到Redis时,我的某些进程开始超时。当我进入受影响的容器并尝试通过到达群集时,与群集的连接超时。这告诉我,问题不仅影响过程,而且影响整个容器。 当我从任何其他容器中使用时,连接都不会出现问题。 我的进程会根据需

  • 我正在使用Spring Boot hibernate制作一个书店rest api,我不知道该如何进行。因此,首先创建用户(使用此处未发布的DTO): 然后他可以登录并搜索他感兴趣的书籍。当他想订购时(使用POST和JSON包含他的书),他应该在我的客户实体中输入他的详细信息(使用DTO): 这是一个好方法吗?我不知道如何才能将用户和客户联系起来- 编辑:澄清: > 用户注册并且只有电子邮件和密码-

  • 问题内容: 我正在阅读程序包中的源代码,遇到了一些问题: 由于我完全是and 的菜鸟,所以请毫不犹豫地分享您所知道的任何信息:) 首先关于func :其参数和返回值意味着什么?我已经搜索了文档和站点,但似乎对此缺乏描述。 其次,由于我正在使用,所以我搜索了源代码并在此处找到它:http : //golang.org/src/pkg/syscall/asm_darwin_amd64.s?h=RawS

  • 我正在为我的大学项目开发一个电子商务网站(spring MVC、Java、mySql、Hibernate)。我有各种模型,如客户,产品,订单,客户历史等。 我能够显示所有客户的详细信息(在管理页面)和所有产品供客户浏览。 但我面临的问题是,我如何展示一个客户的订单和订单历史? 我的orders表有orderId、productId、quantity和total Price。但是要显示产品名,我必须

  • 我想知道以下问题的答案: 1)如果Ignite服务器重新启动,我需要重新启动客户端(web应用程序)。是否有任何方法可以在服务器重新启动时重新连接到服务器。我知道当服务器重新启动时,它分配了一个不同的ID,因此当前现有的连接变得过时。是否有方法克服这个问题,如果是的话,哪一个版本的Ignite支持这个功能。目前我使用1.7版本 3)如果我有一个大对象要缓存,我发现序列化和反序列化在Ignite中需