在Apache CXF JAX-RS中,如何打开auto_redirect_allow_rel_uri标志



我正在使用apache cxf jax-rs 3.1.11 webclient。我正在尝试使其自动遵循重定向。

这是我的代码(有点简化):

final WebClient client = WebClient.create(address);
final HTTPConduit httpConduit = WebClient.getConfig(client).getHttpConduit();
httpConduit.getClient().setAutoRedirect(true);
return client
        .path("/api")
        .accept(MediaType.APPLICATION_JSON)
        .post(Entity.entity(requestPacket.toString(), MediaType.APPLICATION_JSON), String.class);

使用此代码,我得到了例外:

Caused by: java.io.IOException: Relative Redirect detected on Conduit '{http://1.2.3.4:5678}WebClient.http-conduit' on '//1.2.3.4:5678/v1/api'
at org.apache.cxf.transport.http.HTTPConduit.convertToAbsoluteUrlIfNeeded(HTTPConduit.java:1857)
at org.apache.cxf.transport.http.HTTPConduit.access$300(HTTPConduit.java:149)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.redirectRetransmit(HTTPConduit.java:1464)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.processRetransmit(HTTPConduit.java:1443)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRetransmits(HTTPConduit.java:1420)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1554)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1356)
... 30 more

现在,查看httpconduit类的来源,我可以看到一个要设置的属性:

 private static final String AUTO_REDIRECT_ALLOW_REL_URI = "http.redirect.relative.uri";

但是我无法解决的问题是如何使用CXF API设置该属性?如何更改上述代码以打开此属性?HTTPConduit或HttpClientPolicy似乎没有任何方法可以打开此设置。

您必须将其放在请求上下文中:

WebClient.getConfig(client).getRequestContext().put("http.redirect.relative.uri", "true");

最新更新