Из -за потребностей проекта я взял веб -сервис, который использовал ранее, и решил использовать Java Native Jaxws, которые не требуют пакетов JAR. Во -первых, сначала используется использование Wsimport: перейдите по пути, по которому проект находится под CMD, а затем запустите следующую команду
Кода -копия выглядит следующим образом:
wsimport -keeptension -s./src -p com.jaxws.test http://192.168.1.1:8080/service?wsdl
Вы можете найти различные вспомогательные классы, связанные с клиентом, которые автоматически генерируются в пакете com.jaxws.test. Я не буду объяснять, как эти категории подробно используются, онлайн много информации. Тогда я сам пишу класс по вызову (я здесь просто метод, просто называю его)
Кода -копия выглядит следующим образом:
public String Jaxws (Object [] Opargs)
{
Servicesservice Service = New Servicesservice ();
// Добавить заголовок в мыло
service.sethandlerresolver (new Handlerresolver () {
Общественный список <Handler> gethandlerchain (portinfo portinfo) {
Список <Handler> HandlerList = new ArrayList <handler> ();
// Добавить информацию об аутентификации
handlerlist.add (new ClientHandler ());
return handlerlist;
}
});
String result = service.getServicesport (). GetResults (opargs.tostring ());
// Получить результат
System.out.println (результат);
результат возврата;
}
Обратите внимание на [// добавление информации о аутентификации HandlerList.Add (new ClientHandler ());] здесь, поэтому нам также необходимо создать новый класс ClientHandler для реализации сборки сообщений аутентификации следующим образом:
Кода -копия выглядит следующим образом:
пакет com.jaxws.test;
импортировать java.util.set;
Импорт javax.xml.namespace.qname;
Импорт javax.xml.soap.*;
Импорт javax.xml.ws.handler.messagecontext;
Импорт javax.xml.ws.handler.soap.soaphandler;
Импорт javax.xml.ws.handler.soap.soapmessagecontext;
открытый класс ClientHandler реализует soaphandler <soapmessagecontext> {
public boolean handlemessage (soapmessagecontext ctx) {
// Источник, то есть добавить информацию о заголовке, прежде чем клиент выдает запрос
Boolean request_p = (boolean) ctx.get (messagecontext.message_outbound_property);
if (request_p) {
пытаться {
SoapMessage msg = ctx.getMessage ();
SoapenVelope env = msg.getSoAppart (). GetEnvelope ();
Soapheader hdr = env.getheader ();
if (hdr == null) hdr = env.addheader ();
// добавить заголовок информации о сертификации
// Qname (строки имена пространства, строка LocalPart, String Prefix)
// Qname (строки имена пространства, строка LocalPart)
// Qname (String LocalPart)
//@param namespaceuri: Qname пространство имен
//@param localpart: локальная часть Qname
//@Param Prefix: Qname Prefix
Qname name = new qname ("http://csdc.info/", "аутентификация", "wsse");
SOAHEDERELEMEMENT HEADER = HDR.AddHeaderElement (имя);
// addChildElement (строка LocalName, String Prefix, String URI)
// addChildElement (строка LocalName, String Prefix)
// AddChildElement (String LocalName)
//@param uri: имя пространства, к которому принадлежит новый элемент
//@param localname: локальное имя нового элемента
//@Param Prefix: PREFIX SPACE для имени нового элемента
// см. API JDK 1.6
SoapElement userElement = header.AddChildElement («Имя пользователя», «WSSE»);
userElement.addtextNode ("admin");
SoapElement PassElement = header.AddChildElement («Пароль», «WSSE»);
passelement.addtextnode ("admin");
msg.savechanges ();
// Вывод сообщения SOAP в System.out, то есть консоль
msg.writeto (System.out);
вернуть истину;
} catch (Exception e) {
e.printstacktrace ();
}
}
вернуть ложь;
}
@Override
Public Boolean Handlefault (контекст SoapMessageContext) {
// TODO Автогенерированный метод заглушка
вернуть ложь;
}
@Override
public void Close (контекст MessageContext) {
// TODO Автогенерированный метод заглушка
}
@Override
public set <name> getheaders () {
// TODO Автогенерированный метод заглушка
вернуть ноль;
}
}
Этот класс добавляет заголовочное сообщение ко всем сообщениям SOAP.
Кода -копия выглядит следующим образом:
<WSSE: аутентификация XMLNS: wsse = "http://csdc.info/">
<WSSE: имя пользователя> Админ </wsse: имя пользователя>
<WSSE: пароль> Admin </wsse: пароль>
</wsse: аутентификация>
Это реализует клиента Webservice на основе JAXWS с аутентификацией SOAP Header.