Java 将ProxySelector和Authenticator设置回默认值

Java 将ProxySelector和Authenticator设置回默认值,java,proxy,osgi,dynamic-proxy,Java,Proxy,Osgi,Dynamic Proxy,我的任务是为我们当前的OSGi项目编写一个自定义实现。为了对代理使用身份验证,我还必须编写一个自定义的 在OSGi包启动时设置这些自定义实现非常有效。但OSGi捆绑包可以停止/卸载,这就引出了我的问题: 如何取消设置实现并恢复默认(JVM)实现? 当bundle启动时,我保存默认实现: ProxySelector defaultSelector = ProxySelector.getDefault() ProxySelector.setDefault(new MyProxySelector())

我的任务是为我们当前的OSGi项目编写一个自定义实现。为了对代理使用身份验证,我还必须编写一个自定义的

在OSGi包启动时设置这些自定义实现非常有效。但OSGi捆绑包可以停止/卸载,这就引出了我的问题:

如何取消设置实现并恢复默认(JVM)实现?

当bundle启动时,我保存默认实现:

ProxySelector defaultSelector = ProxySelector.getDefault()
ProxySelector.setDefault(new MyProxySelector());
遗憾的是,身份验证器没有
getDefault()
方法

当捆绑包停止时,我想取消设置ProxySelector和Authenticator,如下所示:

ProxySelector.setDefault(defaultSelector); // see above
Authenticator.setDefault(null);
但这不起作用。捆绑停止后,我无法进行任何连接

我唯一的解释是设置
defaultSelector
只是传递一个引用。当我的ProxySelector被销毁时,这些引用点不存在,从而导致JVM没有有效的ProxySelector。我想出的最佳解决方案是克隆选择器。但是ProxySelector没有
clone()
方法。将
defaultSelector
强制转换为某个默认实现(sun.net.spi.DefaultProxySelector)可能不是最好的解决方案,但可以工作。这可能是一个问题,因为它可能会覆盖以前设置的其他自定义实现

那么您对此的最佳做法是什么?