2

我如何为 JAXWS 客户端设置超时,我使用 Jboss 5.1。我试图做到这一点

bp.getRequestContext().put("com.sun.xml.ws.connect.timeout", 100);
bp.getRequestContext().put("com.sun.xml.ws.request.timeout", 100);

但它不起作用。它适用于独立客户端。

当我尝试使用

bp.getRequestContext().put("com.sun.xml.ws.request.timeout", 100);

我得到了 org.jboss.ws.core.WSTimeoutException: Timeout after: 100ms,但它在 300 (3*100 ms) 之后发生。

谁能帮我解决这个问题。

4

2 回答 2

0

虽然这看起来可能是您的疏忽,但 JAX-WS 超时的设置可能取决于您正在构建的特定 RI。

您可以尝试这些设置(它们成对使用)

   BindingProviderProperties.REQUEST_TIMEOUT
   BindingProviderProperties.CONNECT_TIMEOUT

BindingProviderProperties 应该来自com.sun.xml.internal.WS.client

或者弦乐

   javax.xml.ws.client.connectionTimeout
   javax.xml.ws.client.receive timeout

getRequestContext()以毫秒为单位的所有属性。

顺便说一句,你怎么能在没有代码的情况下计时毫秒:)?

于 2012-11-30T16:12:48.857 回答
0

JAXWS使用JAXB进行编组和解

在容器中可能需要更多时间,因为它正在JAXContext扫描您的类路径。

如果是这种情况,请尝试对 JaxBContext 进行急切的初始化:

JBossWS 可能在每个服务的第一个方法调用期间执行不同的操作,而当引用巨大的 wsdl 合同(具有数百个导入的 xml 模式)时,接下来的方法调用可能会有所不同。这是由于在第一次调用期间内部执行的一系列操作,其结果数据随后被缓存并在随后的调用中重用。虽然这通常不是问题,但您可能对每次调用具有几乎相同的性能感兴趣。这可以通过设置org.jboss.ws.eagerInitializeJAXBContextCache 在服务器端(在 JBoss 启动脚本中)和客户端(在 org.jboss.ws.Constants 中提供了一个方便的常量)的系统属性为 true。JAXBContext 创建通常负责第一次调用期间堆栈所需的大部分时间;这个特性使 JBossWS 在处理第一次调用之前尝试急切地创建和缓存 JAXB 上下文。

http://www.mastertheboss.com/javaee/jboss-web-services/web-services-performance-tuning

于 2014-11-24T16:22:13.477 回答