Oui, c'est très certainement possible comme je l'ai fait lors de la création de clients à travers javax.xml.ws.EndpointReference, WS-UNE classe connexe. J'ai ajouté un classpath de référence pour le WSDL pour le WS-UN EndPointReference et le Métro de la mise en œuvre de JAX-WS chargé c'est très bien. Si le chargement du fichier WSDL à partir du WS-UN EndPointReference ou à partir d'un fichier ou une URL http, votre JAX-WS mise en œuvre devrait utiliser le même WSDL code d'analyse que tout ce que vous faites de la résolution d'Url.
La meilleure approche pour vous, c'est probablement de faire quelque chose comme ce qui suit:
URL wsdlUrl = MyClass.class.getResource(
"/class/path/to/wsdl/yourWSDL.wsdl");
Service yourService= Service.create(
wsdlUrl,
...);
Où [ ... ] représente le Nom d'un fichier WSDL du service à l'intérieur de votre WSDL. Maintenant, la chose importante à retenir est que votre WSDL doit être complet et valide. Cela signifie que si votre WSDL importations XSD fichiers ou d'autres fichiers wsdl, l'Url doit être correcte. Si vous avez inclus votre importation WSDL et XSDs dans le même POT que le fichier WSDL, vous devez utiliser des Url relatives pour les importations et les garder tous vos importations dans le même fichier JAR. Le POT de gestionnaire d'URL ne permet pas de traiter les Url relatives par rapport à l'égard du classpath, mais plutôt à une relative dans le fichier JAR si vous ne pouvez pas avoir les importations dans votre WSDL qui courent à travers les Pots à moins que vous mettre en œuvre une URL personnalisée de gestionnaire et votre propre préfixe de faire de chemin de classe basée sur la résolution des importations. Si votre WSDL importations de ressources externes, c'est OK, mais vous vous connectez-vous pour des questions d'entretien si ces ressources ne jamais se déplacer. Même en utilisant une copie statique du WSDL à partir de votre classpath est contraire à l'esprit de WSDL, Web services, et JAX-WS, mais il y a des moments où il est nécessaire.
Enfin, si vous incorporez un statique WSDL, je vous suggère de faire au moins le point de terminaison de service configurable pour les tests et le déploiement des fins. Le code de reconfigurer le point de terminaison de votre client de service Web est comme suit:
YourClientInterface client = yourService.getPort(
new QName("...", "..."),
YourClientInterface.class);
BindingProvider bp = (BindingProvider) client;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://localhost:8080/yourServiceEndpoint");