Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么HttpUrlConnection.plainConnect()中的ProxySelector为空?_Java_Http_Proxy - Fatal编程技术网

Java 为什么HttpUrlConnection.plainConnect()中的ProxySelector为空?

Java 为什么HttpUrlConnection.plainConnect()中的ProxySelector为空?,java,http,proxy,Java,Http,Proxy,我必须调用需要自定义客户端身份验证的WS。此身份验证由在客户端上运行并侦听的程序完成。 因此,在这样启动时,我添加了一个ProxySelector: final ProxySelector ps = new ProxySelector() { @Override public void connectFailed(URI uri, SocketAddress sa, IOException ioe) { ioe.printStackTrace(); }

我必须调用需要自定义客户端身份验证的WS。此身份验证由在客户端上运行并侦听的程序完成。 因此,在这样启动时,我添加了一个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);
final ProxySelector ps=new ProxySelector(){
@凌驾
public void connectFailed(URI、SocketAddress sa、IOException ioe){
ioe.printStackTrace();
}
@凌驾
公共列表选择(URI){
最终列表代理=新的ArrayList();
最终SocketAddress adr=新的InetSocketAddress(“127.0.0.1”,80);
最终代理p=新代理(Proxy.Type.HTTP,adr);
添加(p);
返回代理;
};
ProxySelector.setDefault(ps);
这种用法可以很好地工作,但是在一些重构(与WS调用无关)之后,而不是http://my.server.com 作为URI输入,我有socket://my.server.com 它失败于“未知代理类型:HTTP”,这在套接字方案中似乎很正常

我的旧应用程序和新应用程序之间的区别在于HttpUrlConnection.plainConnect()期间的行为不同。事实上,工作版本使用正确的URI调用我的ProxySelector(第922行), 而新版本跳转到第959行,开始创建一个新的底层连接,最终得到一个socket://方案

所以区别在于以下几行:

ProxySelector sel =
    java.security.AccessController.doPrivileged(
        new java.security.PrivilegedAction<ProxySelector>() {
            public ProxySelector run() {
                return ProxySelector.getDefault();
            }
        });
代理选择器选择=
java.security.AccessController.doPrivileged(
新的java.security.PrivilegedAction(){
公共代理选择器运行(){
返回ProxySelector.getDefault();
}
});
这用于将ProxySelector返回为“sel”,但现在返回null


有人能告诉我这些行的确切含义是什么,以及为什么结果与我的旧应用程序不一样吗?

最终,我明白了

用于生成WS-client的jaxws-maven插件在工作应用程序中的版本为1.10,在新应用程序中更改为1.12,这引入了上述HttpUrlConnection中的更改

仍然不知道发生了什么,以及在1.10和1.12之间更改了哪个依赖库,但在创建HttpConnections的方式上有很大的不同:)

无论如何,感谢那些读到我奇怪问题的人^^