Я использую Metro 2.0 и J2SE5.Написанное мной приложение не знает о внешнем WebService во время компиляции, оно находит их во время выполнения на основе XML-файла бизнес-логики, поэтому я выполняю WSDL-запрос.
Пример кода, который я написал, выглядит какследующим образом:
String wsdlServiceName = ...;
String wsdlURL = ...;
Document payload = ...;</p>
<pre><code>final String nsURI = ...;
final QName serviceName = new QName(nsURI, wsdlServiceName + "Service");
final QName servicePort = new QName(nsURI, wsdlServiceName + "Port");
// Create service and the dispatcher for the SOAP message
Service service = Service.create(new URL(wsdlURL), serviceName);
dispatch = service.createDispatch(servicePort, SOAPMessage.class, Service.Mode.MESSAGE);
// Set timeouts
dispatch.getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 3000);
dispatch.getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 3000);
// Create the outgoing SOAP request
SOAPBinding soapBinding = (SOAPBinding) dispatch.getBinding();
request = soapBinding.getMessageFactory().createMessage();
SOAPBody requestBody = request.getSOAPBody();
requestBody.addDocument(payload);
// Invoke web service operation
SOAPMessage response = dispatch.invoke(request);
Тайм-аут работает правильно при вызове веб-службы (dispatcher.invoke (запрос))
ОДНАКО WSDL запрашивается до того, как установлены тайм-ауты, и если веб-служба не отвечает, потребуется 90 секунд до истечения времени ожидания соединения.
Возможно лиустановить таймауты до запроса WSDL?Вам нужен диспетчер для установки времени ожидания, но это делается ПОСЛЕ создания службы, которая запрашивает WSDL ?!(т.е. Service.create ())