Почему ProxySelector имеет значение null в HttpUrlConnection.plainConnect ()? - PullRequest
0 голосов
/ 05 октября 2011

Мне нужно вызвать WS, который требует пользовательской аутентификации клиента.Эта аутентификация выполняется программой, запущенной на клиенте и прослушивающей http://127.0.0.1:80.. Поэтому я добавляю ProxySelector при запуске следующим образом:

final ProxySelector ps = new ProxySelector() {
    @Override
    public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
        ioe.printStackTrace();
    }

    @Override
    public List<Proxy> select(URI uri) {
        final List<Proxy> proxy = new ArrayList<Proxy>();
        final SocketAddress adr = new InetSocketAddress("127.0.0.1", 80);
        final Proxy p = new Proxy(Proxy.Type.HTTP, adr);
        proxy.add(p);
        return proxy;
};
ProxySelector.setDefault(ps);

Это используется для нормальной работы, но после некоторого рефакторинга(не относится к вызовам WS), вместо ввода http://my.server.com в качестве ввода URI, у меня есть socket: //my.server.com, и происходит сбой с «Неизвестный тип прокси: HTTP», что кажется вполне нормальным для схемы SOCKET ...

Разница между моим старым приложением и новым заключается в том, что поведение во время HttpUrlConnection.plainConnect () не было таким же.Действительно, рабочая версия вызывает мой ProxySelector с правильным URI (строка 922 http://www.docjar.com/html/api/sun/net/www/protocol/http/HttpURLConnection.java.html),, тогда как новая версия переходит на строку 959 и начинает создавать новое базовое соединение, которое заканчивается схемой socket: //.

Таким образом, разница заключается в следующих строках:

ProxySelector sel =
    java.security.AccessController.doPrivileged(
        new java.security.PrivilegedAction<ProxySelector>() {
            public ProxySelector run() {
                return ProxySelector.getDefault();
            }
        });

Это раньше возвращало мой ProxySelector как "sel", но теперь возвращает ноль.

Может кто-нибудь объяснить мне, что именно означаетэти строки, и почему результат не такой, как в моем старом приложении?

1 Ответ

0 голосов
/ 13 октября 2011

В конце концов, я понял это!

jaxws-maven-plugin, используемый для генерации WS-клиента, был в версии 1.10 в рабочем приложении и изменен на 1.12 в новом, что внесло изменения в HttpUrlConnection, как объяснено выше.

До сих пор не знаю, что произошло, и какая зависимая библиотека изменилась между 1.10 и 1.12, но существует довольно БОЛЬШАЯ разница в способе создания HttpConnections:)

В любом случае, спасибо тем, кто прочитал мой странный вопрос ... ^^

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...