2011-09-28 4 views
2

J'essaye d'ajouter une référence de service Web à mon application dans NetBeans 7.0.1. Le service Web Metro est protégé par SSL et hébergé sur le même ordinateur que celui sur lequel je souhaite exécuter le client. J'utilise l'assistant Nouveau service client Web », mais lorsque je soumets un WSDL protégé SSL, je reçois le message d'erreur suivant:NetBeans: Comment créer un client de service Web qui consomme un service Metro protégé par SSL?

Problem with downloading wsdl or schema file.

Check the URL, proxy settings, or whether the server is running.

URL: https://192.168.0.200:8181/MyApp/myService?wsdl

Metro Guide de l'utilisateur - To Secure the Example Web Service Client Application (SSL) états:

In the step where you are directed to cut and paste the URL of the web service that you want the client to consume into the WSDL URL field, type https :// fully-qualified-hostname:8181 /CalculatorApplication/CalculatorWSService?wsdl (changes indicated in bold) to indicate that this client should reference the web service using the secure port. The first time you access this service, accept the certificate (s1as) when you are prompted. This is the server certificate popping up to confirm its identity to the client.

In some cases, you might get an error dialog telling you that the URL https:// fully-qualified-hostname :8181/CalculatorApplication/CalculatorWSService?wsdl couldn't be downloaded. However, this the correct URL, and it does load when you run the service. So, when this error occurs, repeat the steps that create the Web Service Client using the secure WSDL. The second time, the web service reference is created and you can continue creating the client.

Non Peu importe combien de fois j'essaie, j'ai toujours le même message d'erreur (il n'y a pas de proxy et le serveur fonctionne avec les services déployés). Le WSDL s'affiche dans le navigateur après l'acceptation du certificat. Si j'entre l'URL WSDL de base (celle sans HTTPS), l'assistant l'accepte et génère le client. Que dois-je faire pour obtenir ce travail?

MISE À JOUR

de même si je lance un service client et sur des machines différentes. J'utilise le certificat de développement par défaut. Sortie de Retriever:

Error: An I/O error occured. sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target`

Dois-je définir keytore et truststore dans VMargs? Que faire si je veux avoir cette référence de service dans la même application Web qui contient les services Web?

+0

Je soupçonne que le certificat de serveur ne se trouve pas dans le magasin de confiance du client et que la liaison ssl échoue. – Zaki

+0

@Zaki 'La première fois que vous accédez à ce service, acceptez le certificat (s1as) lorsque vous y êtes invité. Cela ne se produit pas et j'obtiens le message d'erreur. J'ai fait un client de travail dans .NET, et il a invité après que j'aie entré l'URL de WSDL dans l'assistant. –

Répondre

2

Réponse trouvée here:

Vous devez exécuter NetBeans avec les options suivantes:

<NETBEANS_HOME>/bin/netbeans.exe 
-J-Djavax.net.ssl.trustStore=<AS_HOME>/domains/domain1/config/cacerts.jks 
-J-Djavax.net.ssl.keyStore=<AS_HOME>/domains/domain1/config/keystore.jks 
-J-Djavax.net.ssl.trustStorePassword=changeit 
-J-Djavax.net.ssl.keyStorePassword=changeit 

En fait, je mets ceux <NETBEANS_HOME>/etc/netbeans.conf, en netbeans_default_options. J'ai quand même eu une erreur, cela m'a juste permis de générer du code client pour les services protégés par SSL. Exécution d'un simple appel WS résultats dans ce:

EDIT IMPORTANT qui suit ne se produit que si vous utilisez les bibliothèques JAX-WS âgées!

Exception in thread "main" javax.xml.ws.WebServiceException: Cannot find 'https://localhost:8181/myApp/myService?wsdl' wsdl. Place the resource correctly in the classpath.

Ceci peut être résolu en mettant les clients DATASTOREWS_WSDL_LOCATION propriété avec une méthode comme ceci:

private static URL getURL() { 
    try { 
     return new URL("https://localhost:8181/myApp/myService?wsdl"); 
    } catch (MalformedURLException ex) { 
     Logger.getLogger(DataStoreWS_Service.class.getName()).log(Level.SEVERE, null, ex); 
     return null; 
    } 
} 

Cela est nécessaire que si vous générez pour un simple application Java, car le code client généré diffère pour l'application Web Java. En outre, je ne pouvais tout simplement pas le faire fonctionner avec un nom d'hôte complet, comme mon adresse IP locale. La seule chose qui a fonctionné était localhost. Une chose importante: n'oubliez pas de regrouper les mêmes bibliothèques Metro que sur le côté service! NB bug report.

Questions connexes