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

10

我有一个应用程序正在运行在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;
}

在运行Java EE 7应用服务器时,我想使用由应用服务器提供的JAX-RS 2.0客户端API。现在我非常难以找到有关如何以平台无关的方式配置JAX-RS 2.0客户端的信息。在WildFly中设置http.proxyHost和http.proxyPort系统属性没有任何效果(我也不想全局配置它)。请问有人知道该如何解决这个问题吗?
2个回答

13

我认为没有独立于供应商的解决方案(至少在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();

ClientProperties是Jersey API中的一个类。


对于RESTEasy,配置如下:

Client client = new ResteasyClientBuilder()
                   .defaultProxy("192.168.1.254", 8080, "http")
                   .build();

ResteasyClientBuilder是RESTEasy API中的一个类。


1
非常感谢。我很担心 - 我想我可以将Resteasy指定为提供的依赖项。我希望避免厂商锁定。 - Max Fichtelmann
1
@MaxFichtelmann 其实,我对这个解决方案并不满意。JAX-RS 2.0 JSR 只提到了 proxy 这个词一次,而且不幸的是,它与 网络代理 没有关系。在我看来,这可能是下一个版本规范需要涵盖的内容。 - cassiomolin

0

使用(WildFly和)RESTEasy(6.2.1.Final),设置代理:

final Client client = ClientBuilder.newBuilder()
    .property("org.jboss.resteasy.jaxrs.client.proxy.host", "192.168.1.254")
    .property("org.jboss.resteasy.jaxrs.client.proxy.port", 8080)
.build();

请查看Jakarta RESTFul Web Services: 51.3.3. HTTP代理


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接