Closed rds76 closed 7 years ago
Zdravím, Díky za tip. Stejný kód funguje bez problémů i v čisté javě mimo kontejner. Možná bych tak ponechal jen vaší variantu. Pomohlo by, kdyby byl port vytvářen vždy kódem výše? Případně umožnit knihovně předat vlastní callback pro vytvoření portu?
Jak to řešíte teď? Vlastní fork a přepsané metody?
S pozdravem Tomáš
Ano, musi fungovat, rozdil je akorat v tom, ze pouzitou implementaci WS clienta neurci classloader, ale je primarne vynucena ApacheCXF knihovna pomoci fakctory metod. Ostatne to popisuje i dokumentace Apache CXF:
public class JaxWsProxyFactoryBean extends ClientProxyFactoryBean Factory for creating JAX-WS proxies, This class provides access to the internal properties used to set-up proxies. Using it provides more control than the standard JAX-WS APIs.
Jinak resim to lokalni upravou kodu metody.
Jeste jednu upravu jsem byl nucen provest a to na tomto radku . K nahrani resource jsem pouzil tento kod /mel by byt univerzalnejsi/:
private static final EETService WEBSERVICE = new EETService(Thread.currentThread().getContextClassLoader().getResource("schema/EETServiceSOAP.wsdl"));
Muzete vyzkouset jestli je funkcni i mimo kontejner? Diky
Rozumím, opravil jsem, otestoval, zdá se vše v pořádku.
Instanci EET service nakonec vytvářím pomocí
private static final EETService WEBSERVICE = new EETService();
Což v důsledku načítá WSDL obdobně, jako navrhujete, jen bez explicitního předávání parametru.
EETService.class.getClassLoader().getResource("schema/EETServiceSOAP.wsdl")
Veškeré změny na větvi: https://github.com/todvora/eet-client/tree/apache-cxf-proxy
Zkuste prosím otestovat, pokud to bude OK i pro vaše použití, zmerguji a releasnu.
S pozdravem Tomáš
Ok. Tak zda se, ze je to takto funkcni. Jinak v nejblizsich dnech otestuji ostry certifikat na produkcnim EET rozhrani. Ostry certifikat totiz nelze pouzit na playground.
Potvrzuji funkcnost s ostrymi certifikaty na produkcnim EET, vcetne overeni podpisu response zpravy prilozenymi root a subord. CA certifikaty Verze Java: OpenJDK1.8
Jeste mam zde tip pro nasazani v prostredi, kde se standardne pouzivaji knihovny JDK javax.ws, napr. J2EE Glassfish. WS client stubs je potreba vytvaret pres factory knihovny WS Apache CXF, nebot classloader ws provider primarne pouzije knihovnou z javax.ws. Je potreba pozmenit kod metody
getPort
ve trideSecureEETCommunication
/tak aby WS client byl implementovan vzdy knihovnou Apachace CXF/ nasledovne:Vice k tomuto problemu je mozno docist se zde