Cześć,
wciągnąłem się trochę w Javę. Bawię się w przyszłościowe tematy i tak zainstalowałem JBoss Fuse'a i na nim różne kombinacje usług. Wszystko idzie dobrze, jak są to proste usługi, przyjmij dane, zapisz, odpowiedz.
Problem pojawił się gdy usługa wykorzystuje inną zewnętrzną usługę (wysyłanie sms'a), która wymaga certyfikatu klienckiego. Ogólny overview:
- stworzyłem proxy-sms, gdzie zaimportowałem wsdl'a usługodawcy i otrzymałem możliwość obiektowego wywoływania wysłania sms'ów z innych pakietów/usług własnych;
- stworzyłem service-checkStatus, która wykonuje sprawdzenie i w pewnych sytuacjach wysyła sms'a.
I teraz tak, usługa "service-checkStatus" by wysłać sms'a korzysta z "proxy-sms" plus podpięcie certyfikatu. Zrealizowałem to w ten sposób, że w usłudze "service-checkStatus" dorzucam:
System.setProperty("javax.net.ssl.keyStore", "/jboss/ets/plik-certyfikatu-api.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "asdfasdfasdf");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
i korzystając z BindingProvider'a używając proxy-sms wysyłam sms'a.
Opis problemu. Co jakiś czas, raz tydzień, raz pół tygodnia usługa od sms'ów zwraca mi fault'a z komunikatem, że brakuje certyfikatu klienckiego. Debugując zacząłem logować co się dzieje z systemowymi propertasami. Przy każdym wysłaniu sms'a (tym poprawnym i tym gdzie rzuca mi fault'em) zawartość
System.getProperty("javax.net.ssl.keyStore");
System.getProperty("javax.net.ssl.keyStorePassword");
jest identyczna, wypełniona. Nie mogę dojść do tego co jest odpowiedzialne za to, że co jakiś ruchomy czas wysyłanie sms'ów przestaje działać rzucając błędem typu: brak certyfikatu klienckiego mimo, że parametry są wypełnione.
Co ciekawe po reboot'cie maszyny usługa znów działa przez jakiś czas.