LINUX.ORG.RU

JAX-WS. Как быть, если сервер требует авторизации для получения wsdl?

 , , , jax-ws,


0

1

Классы генерятся с помощью

<plugin>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <executions>
    <execution>
<!-- ... -->
      <goals>
        <goal>wsdl2java</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Когда я держал wsdl локально, то тут проблем нет:

public static ExchangeMonitorPortType makeProxy_fromFile(Bases_1c base1c) throws Exception {
        // auth while getting wsdl
        // https://stackoverflow.com/questions/22407994/jax-ws-client-cannot-authenticate

        //URL url = new URL(base1c.getWsWsdl());
        URL url = new URL("classpath:wsdl/ExchangeMonitorWS.wsdl");

        QName qname = new QName(base1c.getWsUrl(), base1c.getWsService());
        Service service = Service.create(url, qname);
        ExchangeMonitorPortType proxy = service.getPort(ExchangeMonitorPortType.class);
        BindingProvider prov = (BindingProvider)proxy;
        prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, base1c.getWsUser());
        prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, base1c.getWsPass());

        return proxy;
    }

Но когда я поменял порт на сервере, то клиент (этот код) перестал коннектится.

Если включить URL url = new URL(base1c.getWsWsdl());, то Service service = Service.create(url, qname); ловит эксепшен 401 Not Authenticated.

Подскажите, как правильно его авторизовать? Везде примеры авторизации уже после чтения wsdl.

Можно ли обойтись без сохранения wsdl в файлы, как описано в https://stackoverflow.com/questions/22407994/jax-ws-client-cannot-authenticate ?

★★★★★

Последнее исправление: bvn13 (всего исправлений: 1)

Но когда я поменял порт на сервере, то клиент (этот код) перестал коннектится.

Адрес считывается из wsdl, в котором ты его не поменял? :) Можно заменить там, а ещё лучше передавать адрес явно:

requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, address);

Подскажите, как правильно его авторизовать?

Например, так:

Authenticator.setDefault(new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("foo", "secret".toCharArray());
    }
});

URL url = ...

но лучше держать wsdl локально.

barti_ddu
()
Ответ на: комментарий от barti_ddu

указал адрес явно. работает. спасибо.

bvn13 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.