Devido às necessidades do projeto, peguei o serviço da web que usei antes e optei por usar o JAXWS nativo do Java que não requer pacotes JAR. Primeiro, o uso do WSIMPORT é compartilhado primeiro: vá para o caminho onde o projeto está localizado em CMD e depois execute o seguinte comando
A cópia do código é a seguinte:
wsimport -keep -extension -s./src -p com.jaxws.test http://192.168.1.1:8080/service?wsdl
Você pode encontrar várias classes auxiliares relacionadas ao cliente que são geradas automaticamente no pacote com.jaxws.test. Não explicarei como essas categorias são usadas em detalhes, há muitas informações online. Então eu escrevo a aula de chamada (eu sou apenas um método aqui, apenas chame)
A cópia do código é a seguinte:
public string jaxws (objeto [] Opargs)
{
Service Service Service = New ServicesService ();
// Adicione um cabeçalho ao sabão
Service.SethandlerResolver (New HandleRresolver () {
Lista pública <Handler> GethandlerChain (Portinfo Portinfo) {
List <Handler> HandlerList = new ArrayList <Handler> ();
// Adicione informações de autenticação
Handlerlist.add (new ClientHandler ());
Retornar HandlerList;
}
});
String result = Service.getServiceSport (). GetResults (Opargs.toString ());
// Obtenha o resultado
System.out.println (resultado);
resultado de retorno;
}
Observe o [// Adicionar informações de autenticação HandlerList.add (new ClientHandler ());] aqui, por isso também precisamos criar uma nova classe ClientHandler para implementar a montagem de mensagens de autenticação, da seguinte maneira:
A cópia do código é a seguinte:
pacote com.jaxws.test;
importar java.util.set;
importar javax.xml.namespace.qname;
importar javax.xml.soap.*;
importar javax.xml.ws.handler.messageContext;
importar javax.xml.ws.handler.soap.soaphandler;
importar javax.xml.ws.handler.soap.soapmessageContext;
Classe public ClientHandler implementa Soaphandler <AnemaSessageContext> {
Public boolean HandleMessage (SOAPMESSAGECONTEXT CTX) {
// Outbound, isto é, adicione informações do cabeçalho antes que o cliente emite uma solicitação
Boolean request_p = (boolean) ctx.get (messageContext.message_outbound_property);
if (request_p) {
tentar {
SoapMessage msg = ctx.getMessage ();
SOAPENVELOPE ENV = msg.getsoappart (). Getenvelope ();
SoApheader hdr = Env.getheader ();
if (hdr == null) hdr = Env.addHeader ();
// Adicione um cabeçalho de informações de certificação
// qname (string namespaceuri, string localPart, string prefix)
// qname (string namespaceuri, string localPart)
// QNAME (String LocalPart)
//@param namespaceuri: qname namespace
//@param localPart: a parte local do QNAME
//@param prefix: qname prefix
QNAME NOME = NOVO QNAME ("http://csdc.info/", "Autenticação", "WSSE");
Cabeçalho de SoApheaderelement = HDR.AddheadeRelement (nome);
// addChildElement (string localName, string prefix, string uri)
// addChildElement (string localName, string prefix)
// addChildElement (string localName)
//@param uri: o nome do espaço Uri ao qual o novo elemento pertence
//@param LocalName: o nome local do novo elemento
//@param prefix: prefixo espacial para novo nome de elemento
// Veja a API do JDK 1.6
SoapElement userElement = header.addchildElement ("nome de usuário", "wss");
userElement.addTextNode ("admin");
SOAPELEMENT PASSELEMENT = Header.addchildElement ("Senha", "WSSE");
passElement.addTextNode ("admin");
msg.SaveChanges ();
// Saída da mensagem SOAP para System.out, ou seja, o console
msg.WritEto (System.out);
retornar true;
} catch (Exceção e) {
E.PrintStackTrace ();
}
}
retornar falso;
}
@Override
Public Boolean Handlefault (SoapMessageContext Context) {
// TODO Method Stub
retornar falso;
}
@Override
public void Close (contexto MessageContext) {
// TODO Method Stub
}
@Override
Public Set <Qname> gEtheaders () {
// TODO Method Stub
retornar nulo;
}
}
Esta classe adiciona uma mensagem de cabeçalho a todas as mensagens de sabão.
A cópia do código é a seguinte:
<wss: autenticação xmlns: wss = "http://csdc.info/">
<WSSE: Nome de usuário> Admin </WSSE: Nome de usuário>
<WSSE: Senha> Admin </WSSE: Senha>
</wss: autenticação>
Isso implementa um cliente WebService baseado em JAXWS com autenticação de cabeçalho SOAP.