Comment faire un appel par un javax.xml.ws.Service
Créé un nouveau standard de java 7 projet dans Eclipse et ont réussi à obtenir une instance d'un javax.xml.ws.Service
comme suit:
String wsdlURL = "http://example.com:3000/v1_0/foo/bar/SomeService?wsdl";
String namespace = "http://foo.bar.com/webservice";
String serviceName = "SomeService";
QName serviceQN = new QName(namespace, serviceName);
Service service = Service.create(new URL(wsdlURL), serviceQN);
Cela fonctionne très bien dans une méthode main, donc autant que je peux voir, que de la partie des travaux. Mais je ne peux pas comprendre comment l'utiliser effectivement. Dans SoapUI, j'appelle cela du même service avec une demande qui se présente comme suit:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://foo.bar.com/webservice">
<soapenv:Header/>
<soapenv:Body>
<web:SomeWebServiceRequest acAccountName="name" acAccountPassword="password">
<SomeRequest>
<id>012345678901234</id>
<action>Fix</action>
</SomeRequest>
</web:SomeWebServiceRequest>
</soapenv:Body>
</soapenv:Envelope>
Comment puis-je faire la même demande en Java? Mon objectif est que j'ai une longue liste de ces id
s, et j'ai besoin d'exécuter une demande comme ça pour chacun d'eux. Le faire manuellement dans SoapUI est un peu gênant, donc je voudrais l'automatiser avec un simple console Java application.
OriginalL'auteur Svish | 2012-03-29
Vous devez vous connecter pour publier un commentaire.
Prochaine étape est d'obtenir
Port
de votre service:YourPortInteface
sera généré au cours dewsimport
ou vous pouvez créer et annoter par vous-même si vous avez assez d'expérience dans la "lecture" wsdl.QName
pour le port différent de ce service? Et ceYourPortInterface
, est-ce juste une simple classe avec des annotations? Pourriez-vous donner un exemple simple?est différent, vous pouvez voir le nom de port lors de l'ouverture de wsdl dans un navigateur (
portType
nœud). Comme pour l'exemple, je pourrais le faire bien sûr, mais ce serait inutile pour vous sans toute wsdl. Bien meilleure idée serait runinnigwsimport http://any.public.service/service?wsld
, et de voir les résultats en les comparant à wsdl dans un navigateur.wsimport
ouwsimport.exe
est un fichier binaire dans votre environnement JRE.ah, ok. Cool, vais essayer ça alors 🙂
peut "port" être utilisé comme un singleton?. sans avoir besoin de faire getPort sur chaque appel au service?
dans java9 il ne fonctionne pas si vous utilisez un local WSDL, lors de l'utilisation d'un runtime personnalisé généré avec jlink
OriginalL'auteur Osw
Vous pouvez utiliser JAX-WS en tant que client.
Fondamentalement, vous utilisez wsimport pour créer stub des classes java qui enroulez le service web, vous utilisez ces talons dans votre code java.
Les talons de prendre soin de tous les XML de la traduction, à la fois pour votre demande et la réponse.
Le tutoriel est ici: http://docs.oracle.com/javaee/5/tutorial/doc/bnayn.html
Chercher la partie qui s'appelle: "Un Simple JAX-WS Client"
OriginalL'auteur davidfrancis