当前位置: 首页 > 面试题库 >

如何在不设置系统范围的属性的情况下将HTTP代理用于JAX-WS请求?

车嘉实
2023-03-14
问题内容

我有一个需要向Internet上的系统发出SOAP客户端请求的应用程序,因此它需要通过我们的HTTP代理。

可以通过设置系统范围的值(例如系统属性)来做到这一点:

// Cowboy-style.  Blow away anything any other part of the application has set.
System.getProperties().put("proxySet", "true");
System.getProperties().put("https.proxyHost", HTTPS_PROXY_HOST);  
System.getProperties().put("https.proxyPort", HTTPS_PROXY_PORT);

或通过设置默认的ProxySelector(也是系统范围的设置):

// More Cowboy-style!  Every thing Google has found says to do it this way!?!?!
ProxySelector.setDefault(new MyProxySelector(HTTPS_PROXY_HOST, HTTPS_PROXY_PORT));

如果其他子系统可能希望通过不同的HTTP代理或没有任何代理来访问Web服务器,那么这两个都不是明智的选择。使用ProxySelector可以让我配置哪些连接使用代理,但是对于大型应用程序中的每件事,我都必须弄清楚这一点。

合理的API会java.net.Proxyjava.net.Socket(java.net.Proxy proxy)构造函数那样具有采用对象的方法。这样,必要的设置就在需要设置它们的系统部分本地。是否可以通过JAX-WS做到这一点?

我不想设置系统范围的代理配置。


问题答案:

如果您使用的是JAX-WS,则可以设置基础HttpURLConnection使用的套接字工厂。我看到模糊的迹象表明SSL可以做到这一点(请参阅HTTPS
SSLSocketFactory
),但是我不确定是否可以为常规HTTP连接做到这一点(或者坦率地说,它甚至可以工作:他们引用的JAXWSProperties类似乎不是一个-
标准JDK类)。

如果可以设置套接字工厂,则可以配置使用所需特定代理的自定义套接字工厂。



 类似资料:
  • 问题内容: 我正在实验室中运行Linux(Debian和Ubuntu)。用户名和组名由NIS和yp处理。我们有一些普通用户,每个人都可以访问该用户来运行实验,然后我们每个人都有自己的用户,此外还有一个共同的组,我们都是该组的成员。 如何使用户/组读取/写入(/可执行)共享驱动器(NFS)上的所有文件和目录?基本上我想要的是 或等效地。 但是运行以上命令只能修复文件夹中的当前文件,而umask仅适用

  • 问题内容: 在Java中,我们使用System.setProperty()方法来设置一些系统属性。根据本文的介绍,使用系统属性有些棘手。 System.setProperty()可能是一个邪恶的调用。 这是100%线程敌对的 它包含超全局变量 当这些变量在运行时发生神秘变化时,调试非常困难。 我的问题如下。 系统属性的范围如何?它们是针对每个虚拟机专用还是具有“超全局性”,在每个虚拟机实例上共享相

  • 问题内容: 去年,我通过此链接为Web服务制作了JAX- WS客户端 该Web 服务使用STS服务获取SAML令牌并使用它访问主要Web服务。我使用apache cxf的wsdl2java为该Web服务生成JAX-WS客户端。一切都很好。 最近,他们已更新其STS服务端点。这个新的STS服务端点。其中具有不同的签名和摘要算法。它在请求正文中有一些额外的元素。 我试图修改当前代码,以使其支持新的ST

  • 问题内容: 我正在尝试使用ng-init设置$ scope属性的值,但无法在控制器的javascript中访问该值。我究竟做错了什么?这是一个小提琴: http //jsfiddle.net/uce3H/ 标记: javascript: 在javascrippt中,$ scope.testInput是未定义的。不应该是“价值”吗? 问题答案: 您正在尝试在完成Angular分配之前读取设置值。 演

  • 问题内容: 为了掌握AngularJS,我决定使用其中一个示例,特别是在Todo示例中简单地添加一个“ complete”屏幕,当用户输入5个todo时,它会使用一个切换案例切换到另一个div。 。如果有任何用处,可以在这里找到代码http://jsfiddle.net/FWCHU/1/。 但是,似乎每个开关盒都有其自己的作用域($ scope.todoText不可用),但是在这种情况下,可以使用

  • 有一个行为我找不到相关的留档。让我们假设以下代码。它应该在控制台中显示使用foo.bar属性配置的内容: 如果您在application.yml()中设置了以下属性,它将被正确地拾取并在控制台中显示“fromapplication.yml”,没什么花哨的 现在,如果您使用完全相同的代码,但这次您想使用命令行参数覆盖application.yml中定义的属性,并将--设置为命令行arg(请注意,这次