Mam aplikację, która musi wysłać żądanie klienta SOAP do systemu w Internecie, więc musi przejść przez nasz serwer proxy HTTP.Jak korzystać z serwera proxy HTTP dla żądania JAX-WS bez ustawiania właściwości systemowej?
Można to zrobić poprzez ustawienie wartości systemowych, takich jak właściwości systemowe:
// Cowboy-style. Blow away anything any other part of the application has set.
System.getProperties().put("proxySet", "true");
System.getProperties().put("https.proxyHost", HTTPS_PROXY_HOST);
System.getProperties().put("https.proxyPort", HTTPS_PROXY_PORT);
lub ustawienie domyślne ProxySelector (również ustawienie całego systemu):
// More Cowboy-style! Every thing Google has found says to do it this way!?!?!
ProxySelector.setDefault(new MyProxySelector(HTTPS_PROXY_HOST, HTTPS_PROXY_PORT));
Żaden jest to mądry wybór, jeśli istnieje możliwość, że inne podsystemy będą chciały uzyskać dostęp do serwerów internetowych za pośrednictwem różnych serwerów proxy HTTP lub bez żadnego serwera proxy. Korzystanie z ProxySelector
pozwoliłoby mi skonfigurować, które połączenia używają proxy, ale musiałbym to sobie wyobrazić dla każdej pojedynczej rzeczy w ogromnej aplikacji.
Rozsądny interfejs API miałby metodę, która pobierała obiekt java.net.Proxy
, podobnie jak konstruktor java.net.Socket(java.net.Proxy proxy)
. W ten sposób niezbędne ustawienia są lokalne dla części systemu, która musi je ustawić. Czy jest jakiś sposób, aby to zrobić z JAX-WS?
Nie chcę ustawić ogólnosystemowej konfiguracji proxy.
Opcja 'JAXWSProperties' nie wydaje się istnieć w moim JDK 1.6. – jbindel
Zaakceptuję to później, jeśli nic innego się nie pojawi. – jbindel
Twoja metoda działa, i udało nam się ją z powodzeniem wdrożyć, ale zdecydowałem się przejść z obsługiwanymi interfejsami API i szerokim zakresem JVM ustawienia 'SSLSocketFactory' przy użyciu' HttpsURLConnection.setDefaultSSLSocketFactory() '. Połączymy wszystkie klucze i certyfikaty w jedną wersję domyślnego magazynu kluczy i magazynu zaufanych certyfikatów. – jbindel