[
https://issues.apache.org/jira/browse/CXF-9052?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Freeman Yue Fang resolved CXF-9052.
-----------------------------------
Fix Version/s: 4.1.0
3.5.10
3.6.5
4.0.6
Resolution: Fixed
> LoadDistributorFeature not comaptible with JAX-RS subresources
> --------------------------------------------------------------
>
> Key: CXF-9052
> URL: https://issues.apache.org/jira/browse/CXF-9052
> Project: CXF
> Issue Type: Bug
> Components: JAX-RS
> Affects Versions: 3.5.9, 4.0.5, 3.6.4
> Reporter: Vadim Beilin
> Assignee: Freeman Yue Fang
> Priority: Major
> Fix For: 4.1.0, 3.5.10, 3.6.5, 4.0.6
>
>
> LoadDistributorTargetSelector seems to be confused by subresources.
> I'm attaching a test that demonstrates it below.
> When no clustering features or FailoverFeature is applied, the client tries
> to invoke 'http://localhost:1234/sub/name', as expected. -- `noClustering`
> and `failover` pass.
> When LoadDistributorFeature is applied, the request is to
> 'http://localhost:1234/name' (path segment contributed by the root resource
> is lost) -- `loadDistributor` fails.
>
> ---------------------------------------
> {code}
> import jakarta.ws.rs.GET;
> import jakarta.ws.rs.Path;
> import java.util.List;
> import org.apache.cxf.clustering.FailoverFeature;
> import org.apache.cxf.clustering.LoadDistributorFeature;
> import org.apache.cxf.clustering.SequentialStrategy;
> import org.apache.cxf.feature.Feature;
> import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
> import org.junit.Assert;
> import org.junit.Test;
> public class ShowBug {
> @Test
> public void noClustering() {
> makeRequest(List.of());
> }
>
> @Test
> public void failover() {
> var failover = new FailoverFeature();
> failover.setStrategy(makeStrategy());
> makeRequest(List.of(failover));
> }
>
> @Test
> public void loadDistributor() {
> var distro = new LoadDistributorFeature();
> distro.setStrategy(makeStrategy());
> makeRequest(List.of(distro));
> }
> private static SequentialStrategy makeStrategy() {
> var s = new SequentialStrategy();
> s.setAlternateAddresses(List.of("http://localhost:1234"));
> return s;
> }
> private static void makeRequest(List<Feature> features) {
> var fct = new JAXRSClientFactoryBean();
> fct.setFeatures(features);
> fct.setServiceClass(Root.class);
> fct.setAddress("http://localhost:1234");
> try {
> fct.create(Root.class).sub().name();
> } catch (Exception e) {
> Assert.assertTrue(e.getMessage(),
> e.getMessage().contains("/sub/name"));
> }
> }
>
> interface Root {
> @Path("/sub") Sub sub();
> }
>
> interface Sub {
> @GET @Path("/name") String name();
> }
> }
> {code}
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)