The following interceptor did the trick.

Regards!

    private class MyMessageSenderEndingInterceptor extends
AbstractPhaseInterceptor<Message> {
        public MyMessageSenderEndingInterceptor() {
            super(Phase.PREPARE_SEND_ENDING);
            addAfter(MessageSenderEndingInterceptor.class.getName());
        }

        public void handleMessage(Message message) throws Fault {
            message.put("transport.retransmit.url", null);
        }
    }

On Thu, May 2, 2019 at 4:24 AM Pablo Caballero <[email protected]> wrote:

> Hi Colm! Thank you so much for your help. I think I've found the problem's
> root. In completeExchange method
> (org.apache.cxf.jaxrs.client.AbstractClient class) whenever a redirect is
> accomplished the state's base URI is modified using the stored retransmit
> URL. From my understanding it isn't a good idea to do that.
> I gave a shot to cxf 3.3.1 and the behaviour is the same. :(
> I could send a patch removing those bits if you think it's the way to go.
> In the meantime, I think I'm going for a nasty solution... perhaps a well
> placed interceptor to clean out transport.retransmit.url
>
> Regards!
>
> On Wed, May 1, 2019, 5:19 AM Colm O hEigeartaigh <[email protected]>
> wrote:
>
>> I'd recommend trying with a more recent version of CXF to see if it's a
>> bug
>> that's been fixed subsequent to 3.1.7.
>>
>> Colm.
>>
>> On Wed, May 1, 2019 at 4:28 AM Pablo Caballero <[email protected]> wrote:
>>
>> > Hi community!
>> >
>> > cxf version being used: 3.1.7
>> >
>> > - I'm using cxf as a rest client (Proxy based)
>> > - The server that my client is interacting with returns a 301 (let's
>> > suposse I can't avoid or circunvent that 301 by any way)
>> > - At first, the rest invocation was failing with an exception
>> > - I forced redirects with httpClientPolicy.setAutoRedirect(true) and
>> > everything worked as expected. Hooray!
>> > - But soon I realized that requests following the first one were failing
>> > with 404 Boo Hoo!
>> > - What I can see is that request following the first one are being
>> directed
>> > to a wrong URL
>> > - I suspect that URL is being "constructed" by CXF from the experience
>> > gained after the first redirect (in order to avoid networks round trips)
>> > - Let's see an example:
>> >
>> > - First request to
>> >
>> >
>> http://x.x.x.x/QNet24/services/rest/api/datosCheque?cbu=4310001322100000003060&cuit=27237145874&cantidad=10&tipo=CPD
>> > - Response 301 Location:
>> >
>> >
>> http://x.x.x.x/QNet24/servicesrest/api/datosCheque/?cbu=4310001322100000003060&cuit=27237145874&cantidad=10&tipo=CPD
>> > - The 301 is honored by CXF and then a 200 response is received. Good!
>> >
>> > - Second request to the same interface method
>> > - URL used:
>> >
>> >
>> http://x.x.x.x/QNet24/servicesrest/api/datosCheque/api/datosCheque?cbu=4310001322100000003060&cbu=4310001322100000003060&cuit=27237145874&cuit=27237145874&cantidad=10&cantidad=10&tipo=CPD&tipo=CPD
>> > - Notice the "double" api/datosCheque and the duplicated query string
>> > parameters.
>> >
>> > - Moreover if a invoque the other interface method the URL being used
>> is:
>> >
>> >
>> http://x.x.x.x/QNet24/servicesrest/api/datosCheque/api/negociacion?cbu=4310001322100000003060&cuit=27237145874&cantidad=10&tipo=CPD
>> > (instead of http://x.x.x.x/QNet24/servicesrest/api/negociacion)
>> >
>> > Here it is my interface
>> >
>> > @Path("/api")
>> > @Consumes("application/json")
>> > @Produces("application/json")
>> > public interface BancoService {
>> >
>> > @Path("/datosCheque")
>> > @GET
>> > public Response getNumeracion(
>> > @QueryParam("cbu") String cbu,
>> > @QueryParam("cuit") String cuit,
>> > @QueryParam("cantidad") int cantidad,
>> > @QueryParam("tipo") String tipo);
>> >
>> > @Path("/negociacion")
>> > @POST
>> > public Response negociacion(NegociacionBanco negociacion);
>> >
>> > }
>> >
>> > - Is there something I can do to solve this?
>> >
>> > - I thought about using apache http client and let it handle the
>> redirect
>> > stuff but looking at the code (AsyncHTTPConduitFactory) I see that a
>> > bogus RedirectStrategy is being used and I'm not being able to figure
>> out
>> > if I could change it (to apache http client DefaultRedirectStrategy for
>> > example) or I'd mess it up doing so.
>> >
>> > Thanks in advance!
>> >
>> > Regards!
>> >
>> > Pablo
>> >
>>
>>
>> --
>> Colm O hEigeartaigh
>>
>> Talend Community Coder
>> http://coders.talend.com
>>
>

Reply via email to