Debido a las necesidades del proyecto, recogí el servicio web que usé antes y elegí usar JAXWS nativo de Java que no requiere paquetes JAR. Primero, el uso de WSIMPORT se comparte primero: vaya a la ruta donde el proyecto se encuentra bajo CMD y luego ejecute el siguiente comando
La copia del código es la siguiente:
wsImport -mantenimiento -extension -s./src -p com.jaxwss.test http://192.168.1.1:8080/service?wsdl
Puede encontrar varias clases auxiliares relacionadas con el cliente que se generan automáticamente en el paquete com.jaxws.test. No explicaré cómo se usan estas categorías en detalle, hay mucha información en línea. Luego escribo la clase de llamadas yo mismo (solo soy un método aquí, solo llámalo)
La copia del código es la siguiente:
Cadena pública Jaxws (Object [] Opargs)
{
ServicioService Service = new ServiceSservice ();
// Agregar un encabezado al jabón
servicio.sethandlerResolver (new HandlerResolver () {
Lista pública <Anectler> Gethandlerchain (Portinfo Portinfo) {
Lista <Dandler> HandlerList = New ArrayList <Dandler> ();
// Agregar información de autenticación
HandlerList.Add (nuevo ClientHandler ());
HandlerList de retorno;
}
});
String result = servicio.getServicesPort (). GetResults (opargs.toString ());
// Obtenga el resultado
System.out.println (resultado);
resultado de retorno;
}
Tenga en cuenta [// Agregar información de autenticación HandlerList.Add (New ClientHandler ());] aquí, por lo que también necesitamos crear una nueva clase de ClientHandler para implementar el ensamblaje de mensajes de autenticación, de la siguiente manera:
La copia del código es la siguiente:
paquete com.jaxws.test;
import java.util.set;
import javax.xml.namespace.qname;
import javax.xml.soap.*;
import javax.xml.ws.handler.messageContext;
import javax.xml.ws.handler.soap.soaphandler;
import javax.xml.ws.handler.soap.soapmessageContext;
Cliente de clase pública implementa SOAPHANDLER <ABLOUPMESSAGECONTEXT> {
Public Boolean Handlemessage (SoapMessageContext CTX) {
// Salida, es decir, agregue la información del encabezado antes de que el cliente emita una solicitud
Boolean request_p = (boolean) ctx.get (messageContext.message_outbound_property);
if (request_p) {
intentar {
SOAPMessage msg = ctx.getMessage ();
SOAPEnvelope env = msg.getSoApart (). Getenvelope ();
SOAPHADER HDR = Env.Getheader ();
if (hdr == null) hdr = env.AddHeader ();
// Agregar un encabezado de información de certificación
// Qname (String NamespaceUri, String localPart, prefijo de cadena)
// Qname (String NamespaceUri, String LocalPart)
// Qname (String LocalPart)
//@param namespaceuri: QName Namespace
//@Param LocalPart: la parte local de QName
//@param prefix: QName Prefix
Qname name = new Qname ("http://csdc.info/", "autenticación", "wsse");
SOAPHADERELEMENT Header = HDR.AddHeaderElement (nombre);
// addchildelement (string localName, string prefix, string uri)
// addchildelement (string localName, string prefijo)
// addchildelement (cadena localName)
//@param uri: el nombre de espacio de espacio uri al que pertenece el nuevo elemento
//@param localName: el nombre local del nuevo elemento
//@param prefijo: prefijo espacial para el nombre de nuevo elemento
// Ver la API de JDK 1.6
SoapElement UserElement = Header.AddChildelement ("Nombre de usuario", "WSSE");
UserElement.AddTextNode ("Admin");
SOAPELEMENT PASSELEMEN = Header.AddChildelement ("Password", "WSSE");
passelement.addTextNode ("admin");
msg.savechanges ();
// emitir el mensaje SOAP a System.out, es decir, la consola
msg.writeTo (System.out);
devolver verdadero;
} capt (excepción e) {
E.PrintStackTrace ();
}
}
devolver falso;
}
@Anular
Public Boolean Handefault (contexto de SoapMessageContext) {
// TODO STUB de método generado automático
devolver falso;
}
@Anular
public void Close (contexto de MessageContext) {
// TODO STUB de método generado automático
}
@Anular
conjunto público <qname> getheaders () {
// TODO STUB de método generado automático
regresar nulo;
}
}
Esta clase agrega un mensaje de encabezado a todos los mensajes de SOAP.
La copia del código es la siguiente:
<wsse: autenticación xmlns: wsse = "http://csdc.info/">
<wsse: username> admin </wsse: nombre de usuario>
<wsse: contraseña> admin </wsse: contraseña>
</wsse: autenticación>
Esto implementa un cliente de servicio web con Jaxws con autenticación de encabezado SOAP.