2013-03-04 20 views
5

Wiem, jak generować kody pośredniczące klientów za pomocą Apache CXF. Jednak gdy próbuję uruchomić wygenerowane klasy, korzysta z JAXWS. Zauważam również, że klasy importu wygenerowanych klas pochodzą z pakietu javax. Jak używać zestawu generowanych klas do korzystania z bibliotek Apache CXF zamiast bibliotek JAXWS?Jak korzystać z Apache CXF jako klienta?

Poniżej znajduje się kod używam do generowania odcinki klient:

wsdl2java -frontend jaxws21 -wsdlLocation "META-INF/wsdl/WSCustom.wsdl" -client -d C:\Workspace\WSClient\META-INF\wsdl\ "C:\Workspace\WSClient\META-INF\wsdl\WSCustom.wsdl" 

Odpowiedz

4

Te odcinki są poprawne, nie powinno być żadnych specyficznych import CXF w nich, ponieważ wszystkie informacje CXF potrzebuje można przedstawić za pomocą standardowe adnotacje JAX-WS. W środowisku wykonawczym biblioteki klienta CXF będą używane, jeśli znajdują się na ścieżce klasy, lub te z RI wbudowane w JDK będą używane, jeśli CXF nie jest dostępny. Wygenerowane kody pośredniczące będą działać z jednym z nich.

Zapytałeś w komentarzach o to, które JARy CXF są wymagane, jeśli właśnie uruchamiasz klienta - o ile wiem, to tylko cxf-rt-frontend-jaxws i cxf-rt-transports-http oraz ich przechodnie zależności. Jeśli projekt jest zbudowany z Maven potem po prostu zadeklarować te dwie zależności i wszystko powinno się automatycznie, jeśli nie następnie pobrać Apache Ivy main JAR a następnie uruchomić

java -jar ivy-2.3.0.jar -dependency org.apache.cxf cxf-rt-frontend-jaxws 2.7.3 -retrieve "[artifact]-[revision](-[classifier]).jar" 
java -jar ivy-2.3.0.jar -dependency org.apache.cxf cxf-rt-transports-http 2.7.3 -retrieve "[artifact]-[revision](-[classifier]).jar" 

To powinno rozwiązać przechodnie zależnościami i pobranie odpowiednich słoi z Maven Centralny w bieżącym katalogu.

+0

Witam, @Ian. Dzięki za odpowiedź. Jeśli zarówno CXF, jak i wbudowana JDK są dostępne w ścieżce klas, co będzie priorytetem? Czy istnieje sposób, aby nie umieścić go w ścieżce klas i po prostu uwzględnić go tylko w folderze lib aplikacji? Jak mogę sprawdzić, czy już korzysta z biblioteki CXF? – Arci

+1

@Arci, gdy mówię "w ścieżce klas", niekoniecznie oznacza, że ​​musisz ustawić zmienną środowiskową, mam na myśli, że słoiki są dostępne dla twojej aplikacji w dowolny sposób (WEB-INF/lib, jeśli jest to sieć application, 'java -cp' dla aplikacji wiersza poleceń, cokolwiek). Wykorzysta to, co zostanie znalezione jako pierwsze - jeśli masz zarówno słoiki CXF, jak i Metro "w ścieżce klas", to będzie to pierwsza z nich, jeśli CXF jest w twojej aplikacji i polegasz na wbudowanej kopii Metro w rt.jar, a następnie CXF powinien wygrać. –

+1

Jeśli chodzi o sprawdzanie, które jest używane w danym momencie, można uruchomić poziom [poziomu logowania] (http://cxf.apache.org/docs/debugging-and-logging.html#DebuggingandLogging-Configurelogginglevels.) (CXF docs, ignoruj ​​bit na górze o przechwytywaczach, to tylko wtedy, gdy chcesz logować nieprzetworzone wiadomości z mydłem, które są wysyłane i odbierane). –

Powiązane problemy