Задать вопрос
@igor26

Java SOAP. Авторизация. Не могу понять как ее сделать?

Добрый день!

Хочу подключиться к сервису sletat.ru (module.sletat.ru/XmlGate.svc?singlewsdl)
Написал я такой код:

URL url = new URL("http://module.sletat.ru/XmlGate.svc?singlewsdl");

        QName qname = new QName("urn:SletatRu:Contracts:Soap11Gate:v1", "Soap11Gate");

        Service service = Service.create(url, qname);
        Soap11Gate soap = service.getPort(Soap11Gate.class);


Но когда я пытаюсь получить какие-нибудь данные:

System.out.println(soap.getCountries(6));

Он выводит ошибку:

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Данные для авторизации в заголовке AuthData не предоставлены.
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:125)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:135)
at com.sun.proxy.$Proxy25.getCountries(Unknown Source)
at javarush.client.Sletat.main(Sletat.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Имеется отдельный класс AuthData
Написал я к авторизации такой код:

AuthData auth = new AuthData();
        auth.setLogin(new JAXBElement<String>(qname, String.class, "******"));
        auth.setPassword(new JAXBElement<String>(qname, String.class, "*******"));


Но не могу понять как его прикрутить к soap.
Помогите, буду очень признателен.

Вот весь код:

URL url = new URL("module.sletat.ru/XmlGate.svc?singlewsdl");

QName qname = new QName("urn:SletatRu:Contracts:Soap11Gate:v1", "Soap11Gate");

        Service service = Service.create(url, qname);
        Soap11Gate soap = service.getPort(Soap11Gate.class);

        AuthData auth = new AuthData();
        auth.setLogin(new JAXBElement<String>(qname, String.class, "*******"));
        auth.setPassword(new JAXBElement<String>(qname, String.class, "*********"));

        System.out.println(soap.getCountries(6));
  • Вопрос задан
  • 1821 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
jaxtr
@jaxtr
JavaEE/Spring-разработчик
Попробуй сделать что-то вроде этого перед инициализацией клиента:
// ...
import java.net.Authenticator;
import java.net.PasswordAuthentication;
// ...
        Authenticator myAuth = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password.toCharArray());
            }
        };

        Authenticator.setDefault(myAuth);
// ...
Ответ написан
Комментировать
Мне помогла эта статья.
chrisdail.com/2008/08/13/http-basic-authentication...

Но я использую cxf apache.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы