2013-01-10 19 views
6

Używam jaxws-maven-plugin wersja 2.1. Znalazłem się bardzo dziwny kod wygenerowany dla lokalizacji WSDL ze środków jar:jaxws-maven-plugin rozwiązująca lokalizację WSDL względem lokalizacji klasy, dlaczego?

   <configuration> 
        <keep>true</keep> 
        <sourceDestDir>${basedir}/src/main/java</sourceDestDir> 
        <extension>true</extension> 
        <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory> 
        <packageName>my.package.gen</packageName> 
        <wsdlLocation>wsdl/*</wsdlLocation> 
        <wsdlFiles> 
         <wsdlFile>mywsdl.wsdl</wsdlFile>        
        </wsdlFiles> 
       </configuration> 

I kod generowany jest:

static { 
    URL url = null; 
    try { 
     URL baseUrl; 
     baseUrl = my.package.gen.My_Service.class.getResource("."); 
     url = new URL(baseUrl, "wsdl/mywsdl.wsdl"); 
    } catch (MalformedURLException e) { 
     logger.warning("Failed to create URL for the wsdl Location: 'wsdl/mywsdl.wsdl', retrying as a local file"); 
     logger.warning(e.getMessage()); 
    } 
    MYSERVICE_WSDL_LOCATION = url; } 

Więc plik WSDL jest spojrzał w Katalogu (pakiet) generowanych mieszkańców klas, a nie w głównym katalogu JAR, co byłoby logiczne. Nie można znaleźć pliku WSDL.

Czy jest to błąd w jaxws-maven-plugin, czy jest to błąd w mojej konfiguracji?

+0

tymczasem można znaleźć rozwiązanie dla tego problemu? Mam taki sam problem, ponieważ ty i Samuels rozwiązanie jest naprawdę brzydkie hack. – Vadimo

+0

To samo pytanie z alternatywnym rozwiązaniem. http://stackoverflow.com/questions/4163586/jax-ws-client-whats-t--correct-path-to-access-the-local-wsdl – Vadimo

Odpowiedz

2

Należy wykorzystać wersję JAXWS-maven-plugin 2.3 zamiast 2.1 i wynik będzie, jak można oczekiwać, .

Na wyjściu wersji 2.3 tak (jeśli folder WSDL pod src/main/resources):

URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl"); 
+0

Mówisz, że zostało to naprawione w wersji 2.3 wtyczki jaxws-maven? Sprawdziłem Nexusa mojej firmy i niestety najwyższa wersja to 2.2 (nie mogę używać niczego poza artefaktami z tego miejsca). Czy powinienem zaproponować im aktualizację wersji? Czy masz link do problemu z informacją, w której wersji została ona naprawiona? Potrzebuję czegoś, aby udowodnić, że taka aktualizacja jest konieczna. –

+0

Tak, to prawda. Zmieniłem tylko wersję w mojej kompilacji z wersji 2.3 z powrotem na 2.1, aby zobaczyć wynik podobny do @ Łukasz 웃 L ツ. I to było to :-) Sprawdziłem również moją kompilację gradle z zadaniem wsimport, które używało jax-ws 2.1.4 i było również błędne, więc zaktualizowałem jax-ws 2.2.8 i problem został rozwiązany również tam. Więc narzędzia JAX-WS 2.2.8 również działają zgodnie z wymaganiami. –

+0

Przekażę tę informację mojej firmie. Jeśli aktualizują wtyczkę lub walczą z tym problemem ręcznie, to zależy od nich :) –

1

Dla pokolenia

url = new URL(baseUrl, "wsdl/mywsdl.wsdl"); 

jest to zamierzone zachowanie, zgodnie z tym,

http://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html#wsdlLocation

To zależy od tego, co chcesz zrobić.

Jeśli to, co cię trapi jest

My_Service.class.getResource ("");

można pozbyć punktu (ścieżka względna) z czymś takim:

<plugin> 
     <groupId>com.google.code.maven-replacer-plugin</groupId> 
     <artifactId>replacer</artifactId> 
     <version>1.5.0</version> 
     <executions> 
      <execution> 
      <phase>process-sources</phase> 
      <goals> 
       <goal>replace</goal> 
      </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <file>target/generated-sources/wsimport/lu/hitec/webservices/pssu/${wsdl.app}/${interface.name}_Service.java</file> 
      <replacements> 
      <replacement> 
       <token>_Service\.class\.getResource\("\."\)</token> 
       <value>_Service\.class\.getResource\(""\)</value> 
      </replacement> 
      </replacements> 
     </configuration> 
     </plugin> 
+2

Tak, obejście, które wymaga użycia biblioteki zewnętrznej (wtyczki)). Mam nadzieję, że zostało to naprawione w wersji 2.3 jaxws-maven-plugin, jak pisze Miklos Krivan, w moim przypadku trudno będzie przekonać firmę do korzystania z nowszej wersji wtyczki jaxws, przekonanie ich do korzystania z nowej wtyczki było praktycznie niemożliwe. –

Powiązane problemy