为JAX-RS 2.0客户端API配置代理

Max*_*ann 4 jax-rs java-ee-7

我有一个在Java EE 7应用程序服务器(WildFly)上运行的应用程序,它使用REST资源查询另一个服务.

在以前的应用程序中,我使用了Jersey 1.x客户端API.通过Web代理授予对REST服务的访问权限.

在Jersey中,我创建了Client这样的实例:

public Client create() {

    Client client;
    if ( proxyConfiguration != null && proxyConfiguration.getHost() != null && !proxyConfiguration.getHost().trim().isEmpty() ) {
        HttpURLConnectionFactory urlConnectionFactory = new ProxyUrlConnectionFactory( proxyConfiguration );
        client = new Client( new URLConnectionClientHandler( urlConnectionFactory ), clientConfig );
    } else {
        client = Client.create( clientConfig );
    }

    return client;
}
Run Code Online (Sandbox Code Playgroud)

在Java EE 7应用程序服务器上运行我想使用应用程序服务器提供的JAX-RS 2.0客户端API.

现在我很难找到有关如何以独立于平台的方式配置JAX-RS 2.0客户端的信息.设置http.proxyHosthttp.proxyPort系统属性在WildFly中没有任何效果(我宁愿不在全局配置它).

有谁知道如何解决这个问题?

cas*_*lin 8

我认为没有独立于供应商的解决方案(至少,我没有找到任何与JAX-RS API中的代理相关的内容).

对于Jersey 2.x,您可以尝试:

ClientConfig config = new ClientConfig();
config.property(ClientProperties.PROXY_URI, "192.168.1.254:8080");  
Client client = ClientBuilder.withConfig(config).build();
Run Code Online (Sandbox Code Playgroud)

ClientProperties 是Jersey API的一个类.


对于RESTEasy,配置为:

Client client = new ResteasyClientBuilder()
                   .defaultProxy("192.168.1.254", 8080, "http")
                   .build();
Run Code Online (Sandbox Code Playgroud)

ResteasyClientBuilder 是一个来自RESTEasy API的类.

  • @MaxFichtelmann 实际上,我对这个解决方案并不满意。[JAX-RS 2.0 JSR](http://download.oracle.com/otn-pub/jcp/jaxrs-2_0-fr-eval-spec/jsr339-jaxrs-2.0-final-spec.pdf)提到了这个词*代理*仅一次,不幸的是,它与*网络代理*无关。恕我直言,下一版本的规范可能会涵盖这种情况。 (2认同)