如果在指定时间内没有响应,则放弃 Webservice 调用

问题描述 投票:0回答:1

如果服务器在特定时间内没有响应,如何停止客户端程序(Java)调用的Web服务。如果在指定时间内服务器没有响应,我需要准备错误消息并将消息发送到 UI。

try {
    applicationProcessRs = service.processApplication(applicationProcessRq);
} catch ( ApplicationProcessFaultMsg e ) {
    log.error( e.getMessage(), e );
}

谢谢,
罗摩克里希那 K

java web-services
1个回答
0
投票

如果您想为特定服务设置超时,创建代理后,您需要将其转换为 BindingProvider(您已经知道),获取请求上下文并设置属性。在线 JAX-WS 文档是错误的,这些是正确的属性名称

MyInterface myInterface = new MyInterfaceService().getMyInterfaceSOAP();
Map<String, Object> requestContext = ((BindingProvider)myInterface).getRequestContext();
requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 3000); // Timeout in millis
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 1000); // Timeout in millis
myInterface.callMyRemoteMethodWith(myParameter);

当然,这是一种可怕的做事方式,我会创建一个很好的工厂来生成这些绑定提供程序,可以注入您想要的超时。

请注意,

REQUEST_TIMEOUT
/
CONNECT_TIMEOUT
属性实际上是从 Sun 内部类
com.sun.xml.internal.ws.developer.JAXWSProperties
继承的,并且(至少在 32 位 Linux 上)javac 1.6.0_27 和 javac 1.7.0_03 无法编译此代码(类似JDK-6544224:(反映)ct.sym 中缺少 sun.reflect.misc )。您需要将
-XDignore.symbol.file
传递给 javac 才能使其工作。

© www.soinside.com 2019 - 2024. All rights reserved.