Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Witam

Podczas generowania zalążka web serwisu (a konkretnie klienta) otrzymuję taki błąd:

[WARNING] Service "SampleService" does not contain any usable ports. try r
unning wsimport with -extension switch.
line 1 of https://NazwaDomeny:4444/katalog/SampleService.svc?wsdl

Z opcją -extensions też już próbowałem i otrzymuję taki sam błąd. W czym jest problem? W złej definicji wsdla (na zwykłym http xmlka jest poprawnie wyświetlana)?

Pozdrawiam
Mariusz

konto usunięte

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Sprobuj pobrac wsdl i wykonac ta sama operacje na lokalnym wsdl.Łukasz Grabski edytował(a) ten post dnia 27.04.13 o godzinie 21:32
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

A co to zmieni? Oczywiście pewnie pobrać będę musiał wszystkie powiązane pliki. Problem jest w tym, że po http program łączył się z serwisem prawidłowo,a po https już nie chce pomimo, że zaimplementowałem jego obsługę (być może jednak nie do końca prawidłowo). Chciałem jeszcze raz wygenerować zalążek z linka wsdl , który idzie https, bo może w ten sposób podglądnąłbym jaką mi z automatu wygenerowało obsługę https.Mariusz P. edytował(a) ten post dnia 27.04.13 o godzinie 21:43
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

A czym generujesz klienta? Może program generujący kod klienta nie może się dobrać do wsdla przez https, bo np. nie podajesz mu wymaganych certyfikatów w truststore?
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Jak pisałem wcześniej narzędziem wsimport. Przy próbie łączenia się klientem dostaję taki błąd:

Exception in thread "pool-3-thread-1" javax.xml.ws.WebServiceException: {http://
tempuri.org/} xxxxxxx is not a valid port. Valid po
rts are:
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPortModel(Unknown
Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Sour
ce)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Sour
ce)
at javax.xml.ws.Service.getPort(Unknown Source)
at org.tempuri.NotificationService.getBasicHttpBindingINotificationServi
ce(NotificationService.java:132)
at multicast.PacketsSniffer.run(PacketsSniffer.java:99)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

konto usunięte

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Mialem ten sam problem. Wszystko chodzilo ladnie gdy korzystalem z http, ale generowanie mapowan klienta przy pomocy wsimport na zdalnym wsdl po https nie chcialo dzialac. Dopiero pobranie wsdl lokalnie i odpalenie wsimport wlasnie na nim pomoglo. Sprobuj, co Ci szkodzi ...
Mariusz P.:
A co to zmieni? Oczywiście pewnie pobrać będę musiał wszystkie powiązane pliki. Problem jest w tym, że po http program łączył się z serwisem prawidłowo,a po https już nie chce pomimo, że zaimplementowałem jego obsługę (być może jednak nie do końca prawidłowo). Chciałem jeszcze raz wygenerować zalążek z linka wsdl , który idzie https, bo może w ten sposób podglądnąłbym jaką mi z automatu wygenerowało obsługę https.

konto usunięte

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Dodatkowo, aby to wszystko pozniej moglo dzialac, w kodzie klienta musisz obsluzyc certyfikat ssl, poprzez zaimportowanie do lokalnego keystore lub implementacje dummy "ssl acceptora", ktory bedzie ignorowal certyfikaty klienta.

Proponuje sprawdzenie lokalnego wsdl ...

konto usunięte

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Zostanie Ci pewnie tylko kilka xsd ...
A co to zmieni? Oczywiście pewnie pobrać będę musiał wszystkie powiązane pliki.
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Coś się wygenerowało (lokalnie, zresztą zdalnie jest tak samo) - chyba tak samo jak za pierwszym razem. Jednak z ostrzeżeniem: "[WARNING] Service "NazwaUslugi" does not contain any usable ports. try running wsimport with - extension switch. line 1 of file:/NazwauSlugi.svc". Jak używam -extension to to samo.

Generuję poleceniem:
wsimport -keep -extension - verbose c:\katalog\NazwaUslugi.svc

I już sam nie wiem co dalej.

A certyfikaty obsługuję tak:


try {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
// Trust always
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
// Trust always
}
}
};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
// Create empty HostnameVerifier
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier(hv);
} catch (NoSuchAlgorithmException | KeyManagementException ex) {
} finally {
}
Mariusz P. edytował(a) ten post dnia 28.04.13 o godzinie 13:35

konto usunięte

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Ale pomimo warningow wygenerowaly sie mapowania?
Jezeli tak to bym zlal wszelkie ostrzezenia i podal nazwe portu/uslugi w odpowiednim miejscu wywolania zdalnej uslugi.
Mariusz P.:
Coś się wygenerowało (lokalnie, zresztą zdalnie jest tak samo) - chyba tak samo jak za pierwszym razem. Jednak z ostrzeżeniem: "[WARNING] Service "NazwaUslugi" does not contain any usable ports. try running wsimport with - extension switch. line 1 of file:/NazwauSlugi.svc". Jak używam -extension to to samo.

Generuję poleceniem:
wsimport -keep -extension - verbose c:\katalog\NazwaUslugi.svc

I już sam nie wiem co dalej.

A certyfikaty obsługuję tak:


try {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
// Trust always
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
// Trust always
}
}
};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
// Create empty HostnameVerifier
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}

};

sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);

} catch (NoSuchAlgorithmException | KeyManagementException ex) {
} finally {
}
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

No, ale wsdl nie zmienił się od czasów kiedy klient był napisany bez obsługi https. I wtedy się poprawnie komunikował. A teraz już nie chce pomimo zaimplementowania obsługi https. Coraz mniej to rozumiem :)

konto usunięte

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Niestety jest tak, ze wsdl na https duzo zmienia ;) Tez tego do konca nie rozumiem, ale tak to jakos durnie zrobili ...
Mariusz P.:
No, ale wsdl nie zmienił się od czasów kiedy klient był napisany bez obsługi https. I wtedy się poprawnie komunikował. A teraz już nie chce pomimo zaimplementowania obsługi https. Coraz mniej to rozumiem :)
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Ja bym spróbował wygenerować klienta spod wsdl wystawionego przez https. Zapisz sobie certyfikat serwera chociażby w firefoxie, zaimportuj keytoolem to własnego trustsotre, po czym użyj tego truststore przy generowaniu klienta.

Nigdy nie korzystałem z wsimport, tylko z wsdlToJava z CXF, ale ja robię to (w ancie) np. tak:


<target name="wsdl2java">
<java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
<jvmarg value="-Djavax.net.ssl.trustStore=${ws.truststore.path}" />
<jvmarg value="-Djavax.net.ssl.trustStorePassword=${ws.truststore.pass}" />
<jvmarg value="-Djavax.net.ssl.trustStoreType=${ws.truststore.type}" />
<arg value="-client" />
<arg value="-b" />
<arg value="docroot/META-INF/bindings.xml"/>
<arg value="-d" />
<arg value="docroot/WEB-INF/src" />
<arg value="${ws.wsdl.url}" />
<classpath>
<path refid="cxf.classpath" />
</classpath>
</java>
</target>
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

No właśnie tak próbuję robić. Czyli przed wygenerowaniem klienta muszę mieć zaimportowany certyfikat do keystore?
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Moim zdaniem tak - ja musiałem podać do wsdl2java ten keysotre, bo inaczej nie mógł się połączyć z niezaufanym serwerem i pobrać wsdla. Oczywiście komunikat o błędzie był "od czapy" i wcale nie sugerował że chodzi o brak możliwości połączenia po SSL
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

W moim przypadku certyfikat jest akurat zaufany, więc nie ma żadnych ostrzeżeń nawet jak się łączysz przez przeglądarkę internetową.

Zresztą program klienta jest akurat uruchamiany na serwerze na który został wystawiony ten certfikat.Mariusz P. edytował(a) ten post dnia 28.04.13 o godzinie 17:39
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Zastanawia mnie jedna rzecz. Czy target namespace w wsdl musi być prawdziwy? Obecnie mam fikcyjny tzn. jakiś domyślny wygenerowany przez .Net. A w Interfejsie klienta w javie mam odwołanie przez ten namespace do akcji. No i teraz pytanie czy tak ma być, czy jednak target namespace musi być realny rzeczywisty? Jak to dokumentuje specyfikacja (zwłaszcza dla https i to nie po standardowym porcie)?

konto usunięte

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Namespace to tak jak pakiet, sam sobie go mozesz wymyslic, nie musi byc rzeczywisty lub w jakikolwiek sposob prawdziwy.
Mariusz P.:
Zastanawia mnie jedna rzecz. Czy target namespace w wsdl musi być prawdziwy? Obecnie mam fikcyjny tzn. jakiś domyślny wygenerowany przez .Net. A w Interfejsie klienta w javie mam odwołanie przez ten namespace do akcji. No i teraz pytanie czy tak ma być, czy jednak target namespace musi być realny rzeczywisty? Jak to dokumentuje specyfikacja (zwłaszcza dla https i to nie po standardowym porcie)?
Mariusz P.

Mariusz P. Specjalista ds.
Rozwoju

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Wstępnie namierzyłem przyczynę problemu. Jest nim wiązanie serwisu WCF na serwerze IIS. Wiązanie jest typu wsHttpBinding i jest bodajże nieobsługiwane przez standardowe biblioteki javy. Trzeba użyć nowych wersji bibliotek Metro, WSIT itd. Można też zmienić rodzaj wiązania basicHttpBinding lub cutomBinding, co też właśnie próbuje uczynić. Wybrałem customBinding, ale jeszcze kombinuję jak wyłączyć WS-Addressing (jakieć Policy czy coś takiego), bo też tego chyba w standardzie chyba nie ma obsługiwanego.
Michał Szymczak

Michał Szymczak programista, TUnŻ
"POLISA-ŻYCIE" S.A.

Temat: Błąd przy generowanie zalążka web serwisu za pomocą wsimport

Ze swojej strony mało doświadczonego użytkownika, mogę polecić NetBeans, z użyciem którego implementowałem webservice po https gdzie serwerem był Weblogic (z oraclową implementacją ws-security), a klientem był Glassfish z użyciem Metro, jako implementacji webservice. O dziwo jakoś się to dogadało (trochę zabawy jest przy niezaufanych certyfikatach i identyfikacji nazwy domeny). Netbeans posiada opcje generacji klienta przy użyciu wsdl (zarówno zdalny jak i lokalny wsdl), która korzysta z wsimport i jest bardzo intuicyjna w działaniu.



Wyślij zaproszenie do