Aufgrund der Projektbedürfnisse habe ich den Webservice, den ich zuvor verwendet habe, abgeholt und entschied mich für die Verwendung von Java Native Jaxws, für die keine JAR -Pakete erforderlich sind. Zuerst wird die Verwendung von WSIMport zuerst geteilt: Gehen Sie zu dem Pfad, auf dem sich das Projekt unter CMD befindet, und führen Sie dann den folgenden Befehl aus
Die Codekopie lautet wie folgt:
WSIMPORT -KEEPT -EXTRAIN -S./SRC -P Com.jaxws.test http://192.168.1.1:8080/Service?wsdl
Sie finden verschiedene Client-bezogene Hilfsklassen, die automatisch unter dem Paket com.jaxws.test generiert werden. Ich werde nicht erklären, wie diese Kategorien im Detail verwendet werden, es gibt viele Informationen online. Dann schreibe ich die Anrufklasse selbst (ich bin nur eine Methode hier, nenne sie einfach)
Die Codekopie lautet wie folgt:
öffentliche String JAXWS (Objekt [] Opargs)
{
Serviceservice Service = neuer serviceservice ();
// Fügen Sie Seife einen Header hinzu
service.SetHandLerresolver (New HandLresolver () {
public list <handler> getHandlerchain (portinfo portinfo) {
Liste <Handler> Handlerlist = New ArrayList <handler> ();
// Authentifizierungsinformationen hinzufügen
Handlerlist.Add (New ClientHandler ());
Rückgabehandlerliste;
}
});
String result = service.getServesport (). GetResults (Opargs.toString ());
// Erhalten Sie das Ergebnis
System.out.println (Ergebnis);
Rückgabeergebnis;
}
Beachten Sie hier, die [// Authentifizierungsinformationen hinzufügen ".
Die Codekopie lautet wie folgt:
Paket com.jaxws.test;
Java.util.set importieren;
importieren javax.xml.namespace.qname;
importieren javax.xml.soap.*;
importieren javax.xml.ws.handler.messageContext;
importieren javax.xml.ws.handler.soap.soaphandler;
importieren javax.xml.ws.handler.soap.soapMessageContext;
öffentliche Klasse ClientHandler implementiert Soaphandler <SoapMessageContext> {
public boolean Handlemessage (SoapMessageContext CTX) {
// Outbound, dh, fügen Sie Header -Informationen hinzu, bevor der Kunde eine Anfrage ausstellt
Boolean request_p = (boolean) ctx.get (messageContext.message_outbound_property);
if (request_p) {
versuchen {
SOAPMESSAGE msg = ctx.getMessage ();
Soapenvelope env = msg.getSoappart (). GetEnvelope ();
SOAPHEADER HDR = ENV.GETHEADER ();
if (hdr == null) hdr = env.addHeader ();
// Fügen Sie einen Header für Zertifizierungsinformationen hinzu
// Qname (String -Namespaceuri, String LocalPart, String Prefix)
// Qname (String -Namespaceuri, String LocalPart)
// Qname (String LocalPart)
//@Param Namespaceuri: Qname Namespace
//@param LocalPart: Der lokale Teil von QName
//@Param Präfix: Qname Präfix
Qname name = new Qname ("http://csdc.info/", "Authentifizierung", "WSSE");
SOAPHEADERELement Header = HDR.AddHeaderElement (Name);
// AddChildElement (String LocalName, String Prefix, String URI)
// AddchildElement (String Localname, String Prefix)
// Addchildelement (String Localname)
//@param URI: Der Space -Name URI, zu dem das neue Element gehört
//@Param Lokalname: Der lokale Name des neuen Elements
//@Param Präfix: Speicherplatz Präfix für den neuen Elementnamen
// Siehe die API von JDK 1.6
SOAPELEMENT UMENELEMENT = Header.AddChildElement ("Benutzername", "WSSE");
userElement.addTextNode ("admin");
SOAPELEMENT Passelement = Header.AddChildElement ("Passwort", "WSSE");
passelement.addTextNode ("admin");
msg.savechanges ();
// SOAP -Nachricht an System.out ausgeben, dh die Konsole
msg.writeto (System.out);
zurückkehren;
} catch (Ausnahme e) {
E. printstacktrace ();
}
}
false zurückgeben;
}
@Override
public boolean handlefault (soapMessageContext -Kontext) {
// Todo automatisch generierte Methode Stub
false zurückgeben;
}
@Override
public void close (MessageContext -Kontext) {
// Todo automatisch generierte Methode Stub
}
@Override
public set <qname> getheaders () {
// Todo automatisch generierte Methode Stub
null zurückkehren;
}
}
Diese Klasse fügt allen Seifennachrichten eine Header -Nachricht hinzu.
Die Codekopie lautet wie folgt:
<WSSE: Authentifizierung xmlns: wsse = "http://csdc.info/">
<WSSE: Benutzername> Admin </wsse: Benutzername>
<WSSE: Passwort> admin </wsse: Passwort>
</wsse: Authentifizierung>
Dies implementiert einen JAXWS-basierten WebService-Client mit SOAP-Header-Authentifizierung.