Java 为什么HttpUrlConnection.plainConnect()中的ProxySelector为空?
我必须调用需要自定义客户端身份验证的WS。此身份验证由在客户端上运行并侦听的程序完成。 因此,在这样启动时,我添加了一个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(); }
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的方式上有很大的不同:) 无论如何,感谢那些读到我奇怪问题的人^^