En raison des besoins du projet, j'ai ramassé le service Web que j'ai utilisé auparavant et j'ai choisi d'utiliser Java Native Jaxws qui ne nécessite pas de packages JAR. Tout d'abord, l'utilisation de WSIMPORT est partagée d'abord: allez sur le chemin où le projet est situé sous CMD, puis exécutez la commande suivante
La copie de code est la suivante:
WSIMPORT -EXTENTISSE-EXTENSION -S./SRC -P com.jaxws.test http://192.168.1.1:8080/service?wsdl
Vous pouvez trouver diverses classes auxiliaires liées au client générées automatiquement dans le cadre du package com.jaxws.test. Je n'expliquerai pas comment ces catégories sont utilisées en détail, il y a beaucoup d'informations en ligne. Ensuite, j'écris moi-même la classe d'appels (je suis juste une méthode ici, appelez-le)
La copie de code est la suivante:
String public jaxws (objet [] OPARGS)
{
Service ServiceService = new ServiceService ();
// Ajouter un en-tête au savon
service.sethandlerresolver (nouveau handlerresolver () {
Liste publique <Handler> Gethandlerchain (Portinfo Portinfo) {
List <handler> handlerList = new ArrayList <Handler> ();
// Ajouter des informations d'authentification
handlerList.add (new ClientHandler ());
return handlerList;
}
});
String result = Service.getServicesport (). GetResults (opargs.toString ());
// Obtenez le résultat
System.out.println (résultat);
Résultat de retour;
}
Remarquez le [// ajouter d'authentification HandlerList.add (new ClientHandler ());] Ici, nous devons donc également créer une nouvelle classe ClientHandler pour implémenter l'assemblage des messages d'authentification, comme suit:
La copie de code est la suivante:
package com.jaxws.test;
import java.util.set;
Importer javax.xml.namespace.qname;
import javax.xml.soap. *;
Importer javax.xml.ws.handler.messageContext;
Importer javax.xml.ws.handler.soap.saphandler;
import javax.xml.ws.handler.soap.oapMessageContext;
classe publique ClientHandler implémente Soaphandler <SoapMessageContext> {
public booléen handlessage (soapMessageContext ctx) {
// sortant, c'est-à-dire ajouter des informations d'en-tête avant que le client ne fasse une demande
Booléen request_p = (boolean) ctx.get (MessageContext.Message_outbound_Property);
if (request_p) {
essayer {
SoapMessage msg = ctx.getMessage ();
SoapenVelope Env = msg.getSoAppart (). GetEnvelope ();
Soapheader hdr = env.geTheader ();
if (hdr == null) hdr = env.addheader ();
// Ajouter un en-tête d'information de certification
// QNAME (String namespaceuri, string localPart, String Prefix)
// QNAME (String namespaceuri, string localPart)
// QNAME (String localPart)
// @ param namespaceuri: QNAME Namespace
// @ param localPart: la partie locale de QName
// @ préfixe: préfixe QName
QName name = new QName ("http://csdc.info/", "authentification", "wsse");
En-tête SoAapheDereElement = hdr.addheleDelement (name);
// addChildElement (String localName, String Prefix, String Uri)
// addChildElement (String localName, String Prefix)
// addChildElement (String localName)
// @ param uri: le nom d'espace uri auquel appartient le nouvel élément
// @ param localname: le nom local du nouvel élément
// @ Préfixe param: Préfixe d'espace pour le nouveau nom d'élément
// Voir l'API de JDK 1.6
SoapEllement userElement = header.addchildElement ("nom d'utilisateur", "wsse");
useremement.addTextNode ("admin");
SOAPELlement panselement = header.addchildElement ("mot de passe", "wsse");
PASSEMENT.AdDTextNode ("Admin");
MSG.SAVECHANGES ();
// Sortie SOAP Message à System.out, c'est-à-dire la console
msg.writeTo (System.out);
Retour Vrai;
} catch (exception e) {
e.printStackTrace ();
}
}
retourne false;
}
@Outrepasser
Public Boolean HandleFault (SOAPMessageContext Context) {
// Talage de méthode générée automatiquement de TODO
retourne false;
}
@Outrepasser
public void close (MessageContext Context) {
// Talage de méthode générée automatiquement de TODO
}
@Outrepasser
Set public <qname> getheaders () {
// Talage de méthode générée automatiquement de TODO
retourner null;
}
}
Cette classe ajoute un message d'en-tête à tous les messages SOAP.
La copie de code est la suivante:
<WSSE: Authentification XMLNS: WSSE = "http://csdc.info/">
<wsse: nom d'utilisateur> admin </ wsse: nom d'utilisateur>
<wsse: mot de passe> admin </ wsse: mot de passe>
</ wsse: authentification>
Cela implémente un client WebService basé sur JAXWS avec authentification de l'en-tête de savon.