我需要实现一个访问给定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的详细信息,我需要在抛出的ClientTransportException上使用getCause()。更糟糕的是:我尝试测试读取超时值,但没有这样的选项。我在wsdl文件中更改了服务位置,将请求发送到一个简单地永远等待而不返回的php脚本。你猜怎么着:网络服务客户端不会超时,也会一直等待(我在等待30多分钟后终止了应用程序)。如果其中一些连接“卡住”,我最终会耗尽TCP连接,这对我的应用程序来说不是一个选择。
enhanceAddress(auth、param、address)方法未实现,但用javax.jws.*注释进行了标注,这意味着我无法查看/更改/检查实际执行的代码。
除了放弃整个wsimport/javax.jsw-stuff并实现自己的soap客户端外,我还有其他选择吗?