使用 Apache CXF 3 和 JAX-RS 2.0 添加客户端代理

Tho*_*mas 1 java rest proxy cxf jax-rs

我尝试向我的Apache CXF 3客户端 API添加代理。

ClientBuilder.newClient().target(serverUri)
                         .request()
                         .post();
Run Code Online (Sandbox Code Playgroud)

在 Jersey 实现中,我使用 ClientConfig :

ClientConfig config = new ClientConfig();
config.connectorProvider(new ApacheConnectorProvider());
config.property(ClientProperties.PROXY_URI, proxyAddress);
ClientBuilder.newClient(config) ...
Run Code Online (Sandbox Code Playgroud)

我想用 CXF 3 做同样的事情而不使用他们的特定客户端(我使用 JAX-RS 客户端实现)并且不在 JVM 上设置代理。

任何帮助都将得到回报 ;)

编辑 :

解决方案的开始可以是:

client.property("http.proxy.server.uri", proxyUri); 
client.property("http.proxy.server.port",proxyPort); 
Run Code Online (Sandbox Code Playgroud)

但我没有找到代理身份验证的属性。

dur*_*dur 6

您不使用 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

表示当前代理或 WebClient 的配置。给定一个名为“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);
Run Code Online (Sandbox Code Playgroud)