2015-12-10 40 views
1

我嘗試將代理添加到我的Apache CXF 3客戶端API。使用Apache CXF 3和JAX-RS 2.0添加客戶端代理

ClientBuilder.newClient().target(serverUri) 
         .request() 
         .post(); 

隨着澤西實現我用ClientConfig:

ClientConfig config = new ClientConfig(); 
config.connectorProvider(new ApacheConnectorProvider()); 
config.property(ClientProperties.PROXY_URI, proxyAddress); 
ClientBuilder.newClient(config) ... 

,我希望做CXF 3同樣的事情,而不使用其特定的客戶端(我用的JAX-RS客戶端實現),而不是設置JVM上的代理。

任何幫助將apriciated;)

編輯:

的解決方案一開始可以:

client.property("http.proxy.server.uri", proxyUri); 
client.property("http.proxy.server.port",proxyPort); 

,但我沒有找到代理認證特性。

回答

3

您不使用JAX-RS客戶端,它只是一個接口,請參閱JAX-RS API。實現是Apache CXF客戶端,請參見JAX-RS 2.0 Client API

CXF 3.0.0實現JAX-RS 2.0客戶端API。在內部它是根據CXF特定的WebClient實現的。

您可以使用Apache CXF的客戶端配置,請參閱Apache CXF API

代表當前的代理服務器或Web客戶端的配置。給定一個名稱爲「client」的實例,可以使用WebClient.getConfig(client)調用來訪問其配置。

實施例:

Client client = ClientBuilder.newClient(); 
HTTPConduit conduit = WebClient.getConfig(client).getHttpConduit(); 

HTTPClientPolicy policy = new HTTPClientPolicy(); 
policy.setProxyServer("my.proxy.domain"); 
policy.setProxyServerPort(80); 
conduit.setClient(policy); 

ProxyAuthorizationPolicy policy = new ProxyAuthorizationPolicy(); 
policy.setAuthorizationType("Basic"); 
policy.setUserName(PROXY_USER); 
policy.setPassword(PROXY_PWD); 
conduit.setProxyAuthorization(policy);