[
https://issues.apache.org/jira/browse/CXF-3171?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
N. Tisserand updated CXF-3171:
------------------------------
Description:
When VM args "{{-Dhttp.proxyHost=xxxxxxxx -Dhttp.proxyPort=3128}}" are set,
there is no way to connect a webservice directly without passing throuh the
proxy xxxxxxxx.
The client CXF is build as following :
{code:java|borderStyle=solid}JaxWsProxyFactoryBean factory = new
JaxWsProxyFactoryBean();
factory.setServiceClass(MyWs.class);
factory.setAddress(bundle.getProperty("url.web.service"));
MyWs instance = (MyWs) factory.create();
Client client = ClientProxy.getClient(instance);
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = conduit.getClient();
httpClientPolicy.setAllowChunking(false);
// Force NO proxy ?
httpClientPolicy.setProxyServer(null);
httpClientPolicy.setProxyServerPort(0);
// httpClientPolicy.unsetProxyServerPort(); // tried without success
conduit.setClient(httpClientPolicy);
{code}
When creating the instance with , CXF use HttpURLConnectionFactoryImpl (or
HttpsURLConnectionFactory) to open the url :
{code:java|borderStyle=solid} if (proxy != null) {
return (HttpURLConnection) url.openConnection(proxy);
} else {
return (HttpURLConnection) url.openConnection();
}
{code}
When the variable "{{proxy}}" is null, {{url.openConnection()}} is used, and
benifits of VM args ({{http.proxyHost}} and {{http.proxyPort}}).
The only solution to bypass the proxy, while keeping existing VM args, is to
add a System property "{{http.nonProxyHosts}}" in order to exclude the host of
the proxy. This can be done with an other VM arg
"{{-Dhttp.nonProxyHosts=xxxx}}" or programmatically :
{{System.setProperty("http.nonProxyHosts", "xxxx")}}
According to
http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html
(chapter 3 Proxy class) when no proxy is required url.openConnection() should
be used like this :
{code:java|borderStyle=solid} url.openConnection(Proxy.NO_PROXY);{code}
The technote points out : ??"Now, this guarantees you that this specific URL
will be retrieved though a direct connection bypassing any other proxy
settings, which can be convenient."??
I think that using {{url.openConnection(Proxy.NO_PROXY)}} could fix this
problem in :
*
org.apache.cxf.transport.http.HttpURLConnectionFactoryImpl.createConnection(Proxy
proxy, URL url) > line #51 (release 2.3.1)
*
org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnection(Proxy
proxy, URL url) > line #120 (release 2.3.1)
(!) WARNING (!) : this issue can conflicts with this other one :
[CXF-2839|http://issues.apache.org/jira/browse/CXF-2839]
A lot of tests will be required.
was:
When VM args "{{-Dhttp.proxyHost=xxxxxxxx -Dhttp.proxyPort=3128}}" are set,
there is no way to connect a webservice directly without passing throuh the
proxy xxxxxxxx.
The client CXF is build as following :
{code:java|borderStyle=solid}JaxWsProxyFactoryBean factory = new
JaxWsProxyFactoryBean();
factory.setServiceClass(MyWs.class);
factory.setAddress(bundle.getProperty("url.web.service"));
MyWs instance = (MyWs) factory.create();
Client client = ClientProxy.getClient(instance);
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = conduit.getClient();
httpClientPolicy.setAllowChunking(false);
try {
String proxyHost = bundle.getProperty("web.service.proxy.host");
String proxyPort = bundle.getProperty("web.service.proxy.port");
if (proxyHost != null && !proxyHost.isEmpty()) {
httpClientPolicy.setProxyServer(proxyHost);
httpClientPolicy.setProxyServerPort(Integer.parseInt(proxyPort));
conduit.setClient(httpClientPolicy);
} else {
// Force NO proxy ?
httpClientPolicy.setProxyServer(null);
httpClientPolicy.setProxyServerPort(0);
// httpClientPolicy.unsetProxyServerPort(); // tried without success
conduit.setClient(httpClientPolicy);
}
} catch (NumberFormatException nfe) {
log.error("ClientWS.init: proxy initialization failed", nfe);
}
{code}
When creating the instance with , CXF use HttpURLConnectionFactoryImpl (or
HttpsURLConnectionFactory) to open the url :
{code:java|borderStyle=solid} if (proxy != null) {
return (HttpURLConnection) url.openConnection(proxy);
} else {
return (HttpURLConnection) url.openConnection();
}
{code}
When the variable "{{proxy}}" is null, {{url.openConnection()}} is used, and
benifits of VM args ({{http.proxyHost}} and {{http.proxyPort}}).
The only solution to bypass the proxy, while keeping existing VM args, is to
add a System property "{{http.nonProxyHosts}}" in order to exclude the host of
the proxy. This can be done with an other VM arg
"{{-Dhttp.nonProxyHosts=xxxx}}" or programmatically :
{{System.setProperty("http.nonProxyHosts", "xxxx")}}
According to
http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html
(chapter 3 Proxy class) when no proxy is required url.openConnection() should
be used like this :
{code:java|borderStyle=solid} url.openConnection(Proxy.NO_PROXY);{code}
The technote points out : ??"Now, this guarantees you that this specific URL
will be retrieved though a direct connection bypassing any other proxy
settings, which can be convenient."??
I think that using {{url.openConnection(Proxy.NO_PROXY)}} could fix this
problem in :
*
org.apache.cxf.transport.http.HttpURLConnectionFactoryImpl.createConnection(Proxy
proxy, URL url) > line #51 (release 2.3.1)
*
org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnection(Proxy
proxy, URL url) > line #120 (release 2.3.1)
(!) WARNING (!) : this issue can conflicts with this other one :
[CXF-2839|http://issues.apache.org/jira/browse/CXF-2839]
A lot of tests will be required.
Code snippet simplification
> http.proxyHost and http.proxyPort of System properties win when no proxy is
> required
> ------------------------------------------------------------------------------------
>
> Key: CXF-3171
> URL: https://issues.apache.org/jira/browse/CXF-3171
> Project: CXF
> Issue Type: Bug
> Components: Transports
> Affects Versions: 2.2, 2.2.1, 2.2.2, 2.2.3, 2.2.4, 2.2.5, 2.2.6, 2.2.7,
> 2.2.8, 2.2.9, 2.1.10, 2.0.13, 2.2.10, 2.3.0, 2.2.11, 2.2.12, 2.3.1
> Reporter: N. Tisserand
> Original Estimate: 3h
> Remaining Estimate: 3h
>
> When VM args "{{-Dhttp.proxyHost=xxxxxxxx -Dhttp.proxyPort=3128}}" are set,
> there is no way to connect a webservice directly without passing throuh the
> proxy xxxxxxxx.
> The client CXF is build as following :
> {code:java|borderStyle=solid}JaxWsProxyFactoryBean factory = new
> JaxWsProxyFactoryBean();
> factory.setServiceClass(MyWs.class);
> factory.setAddress(bundle.getProperty("url.web.service"));
> MyWs instance = (MyWs) factory.create();
> Client client = ClientProxy.getClient(instance);
> HTTPConduit conduit = (HTTPConduit) client.getConduit();
> HTTPClientPolicy httpClientPolicy = conduit.getClient();
> httpClientPolicy.setAllowChunking(false);
>
> // Force NO proxy ?
> httpClientPolicy.setProxyServer(null);
> httpClientPolicy.setProxyServerPort(0);
> // httpClientPolicy.unsetProxyServerPort(); // tried without success
> conduit.setClient(httpClientPolicy);
> {code}
> When creating the instance with , CXF use HttpURLConnectionFactoryImpl (or
> HttpsURLConnectionFactory) to open the url :
> {code:java|borderStyle=solid} if (proxy != null) {
> return (HttpURLConnection) url.openConnection(proxy);
> } else {
> return (HttpURLConnection) url.openConnection();
> }
> {code}
> When the variable "{{proxy}}" is null, {{url.openConnection()}} is used, and
> benifits of VM args ({{http.proxyHost}} and {{http.proxyPort}}).
> The only solution to bypass the proxy, while keeping existing VM args, is to
> add a System property "{{http.nonProxyHosts}}" in order to exclude the host
> of the proxy. This can be done with an other VM arg
> "{{-Dhttp.nonProxyHosts=xxxx}}" or programmatically :
> {{System.setProperty("http.nonProxyHosts", "xxxx")}}
> According to
> http://download.oracle.com/javase/6/docs/technotes/guides/net/proxies.html
> (chapter 3 Proxy class) when no proxy is required url.openConnection() should
> be used like this :
> {code:java|borderStyle=solid} url.openConnection(Proxy.NO_PROXY);{code}
> The technote points out : ??"Now, this guarantees you that this specific URL
> will be retrieved though a direct connection bypassing any other proxy
> settings, which can be convenient."??
> I think that using {{url.openConnection(Proxy.NO_PROXY)}} could fix this
> problem in :
> *
> org.apache.cxf.transport.http.HttpURLConnectionFactoryImpl.createConnection(Proxy
> proxy, URL url) > line #51 (release 2.3.1)
> *
> org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnection(Proxy
> proxy, URL url) > line #120 (release 2.3.1)
> (!) WARNING (!) : this issue can conflicts with this other one :
> [CXF-2839|http://issues.apache.org/jira/browse/CXF-2839]
> A lot of tests will be required.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.