[ 
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)

Reply via email to