SORU
27 Ocak 2010, ÇARŞAMBA


Nasıl JAX-WS Java eklentisi bir istemci zaman aşımı ayarlarım?

JAXWS-Rİ 2.1 web servisi için bir arabirim oluşturmak için bir WSDL dayalı olarak kullandım. Web servis ile herhangi bir sorun iletişim kurabilirim, ama web hizmet istekleri göndermek için bir zaman aşımı belirtmek için mümkün olmamıştır. Eğer bazı nedenlerden dolayı yanıtlamak değilse istemci sadece tekerlekler sonsuza kadar dönmeye görünüyor.

Avlanmaya muhtemelen böyle bir şey yapmaya çalışıyor olmam gerektiğini ortaya koymuştur:

((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.connect.timeout", 10000);

Ben de, hangi bağlı olarak, bu özellikleri yerine ayarlamanız gerekebilir keşfetti:

((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 10000);

Benim derdim, doğru olan ne olursa olsun, bilmiyorumneredeBunu yapabilirim. Elimdeki bir Service alt uygulayan otomatik oluşturulan arayüz için Java eklentisi ve anlamı bu oluyor instanciated, eğer WSDL olmayan duyarlı o zaman zaten çok geç set özellikleri:

MyWebServiceSoap soap;
MyWebService service = new MyWebService("http://www.google.com");
soap = service.getMyWebServiceSoap();
soap.sendRequestToMyWebService();

Herkes doğru yönde bana gelin miyim?!

CEVAP
3 EKİM 2010, Pazar


Bu eski ve başka bir yerde cevap biliyorum ama umarım bu kendini kapatıyor. WSDL dinamik ama sistem özelliklerini indirmek için neden isteyeyim emin değilim:

sun.net.client.defaultConnectTimeout (default: -1 (forever))
sun.net.client.defaultReadTimeout (default: -1 (forever))

herkes için geçerli olmalıdır JAX-WS kullanan ve HttpURLConnection kullanarak okur bağlanır. Bu takdirde uzak bir yerden WSDL alıyorsanız sorunu çözmek gerekir - ama yerel diskteki bir dosya muhtemelen daha iyi.

Sonraki, eğer ayarlamak istediğiniz zaman aşımı için özel hizmetler, bir kere oluşturulan proxy ihtiyacın artığını bir BindingProvider (biliyorsun zaten), istek içeriği ve set özellikleri. Online JAX-WS belgeleri yanlış, bu doğru özellik isimleri (evet, onlar benim için çalışıyor).

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);

Tabii ki, bu şeyler yapmak için korkunç bir yoldur, istediğiniz zaman aşımı ile enjekte edilebilir bu bağlama sağlayıcıları üretmek için güzel bir fabrika oluşturmak istiyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Creavite

    Creavite

    8 Mart 2009
  • Grace Su

    Grace Su

    6 Ocak 2006
  • SketchBookPro

    SketchBookPr

    6 Mayıs 2009