Hi Dan,

> However, we like to have
> some sort of timeout so your "main thread" doesn't hang indefinitely which
> could happen if the service goes down while processing or similar.  Thus, the
> timeout shown above on the ClientImpl.

Would be more usable here to set default timeout to infinite and provide 
possibility to customize the value? 

Regards,
Andrei.

> -----Original Message-----
> From: Daniel Kulp [mailto:[email protected]]
> Sent: Montag, 17. März 2014 20:54
> To: [email protected]; Guzmán Llambías
> Subject: Re: http-conduit timeout for long delay decoupled responses
> 
> 
> You'll likely need to do:
> 
> ((ClientImpl)ClientProxy.getClient(proxy)).setSynchronousTimeout(180000);
> 
> or similar.     Unfortunately, there isn't any other way to configure this.  
> :-(
> 
> That said, I'd recommend a different approach..
> 
> There are a few different "types" of timeouts that may apply in different
> scenarios.   The main one you normally would use is the conduit level receive
> time out  - this is the one set on the conduit and would be used for purely
> synchronous transport level IO.   Basically, after a request is sent, how 
> long to
> wait on the actually connection for a response.    This works fine for normal
> synchronous calls as you send the request and you want right on that
> HTTPUrlConnection for the response.   However, when using decoupled
> responses, that timeout doesn't work very well for what you need.  We send the
> request and then wait on the HTTPUrlConnection like normal, the server sends
> back the 202 partial response to "accept" the request, and we're then done
> with the connection.   As long as the 202 came back in a timely manner, we
> wouldn't hit the receive timeout at the connection level.
> 
> That's where the above timeout occurs.   If you are calling a synchronous
> method (response expected) using a decoupled response, the ClientImpl then
> has to wait for the response to come in.  We support having the response come
> in on a different transport than what was used to send the request so a
> transport level timeout wouldn't be appropriate.   However, we like to have
> some sort of timeout so your "main thread" doesn't hang indefinitely which
> could happen if the service goes down while processing or similar.  Thus, the
> timeout shown above on the ClientImpl.   And yes, I DO think there should be a
> better way to configure that.
> 
> HOWEVER, I would STONGLY suggest that you flip to generating the async
> methods (-asyncMethod flag to wsdl2java) and use those for this case.   In 
> that
> case, you would use one of the two async style methods that pass a callback or
> provide a Future that you can use.   Since the client wouldn't have to wait 
> for
> anything, no timeouts would occur and you can "control" that aspect yourself
> with the appropriate wait calls.   Also, you main thread can go on and do 
> other
> things if you can handle it that way.
> 
> 
> Dan
> 
> 
> 
> 
> On Mar 17, 2014, at 3:19 PM, Guzmán Llambías
> <[email protected]> wrote:
> 
> > Hi Andrei!
> >
> > I monitor the exchanged messages and the service receives the request
> > and correctly sends the answer to the decoupled-endpoint
> > (http-conduit). When the service processing delays more than 60segs, a
> > timeout occurs on the client. I attach the Client Project
> >
> > regards
> > Guzmán
> >
> > -----Mensaje original----- From: Andrei Shakirin
> > Sent: Saturday, March 15, 2014 9:15 AM
> > To: [email protected]
> > Subject: RE: http-conduit timeout for long delay decoupled responses
> >
> > Hi,
> >
> > For decoupled responses timeout should not be relevant - response will be
> sent using separate HTTP channel.
> > You are sure that request arrives the service and service sends the 
> > response?
> > Try to configure TCP monitor to catch network communication and see what
> happens.
> >
> > Regards,
> > Andrei.
> >
> >> -----Original Message-----
> >> From: Guzmán Llambías [mailto:[email protected]]
> >> Sent: Freitag, 14. März 2014 15:59
> >> To: [email protected]
> >> Subject: http-conduit timeout for long delay decoupled responses
> >>
> >> Hi guys!
> >>
> >> I tried using the http-conduit and worked fine but when the service
> >> has a long delay to send the answer, a timeout error occurs. I tried
> >> to use the receiveTimeout attribute but it didn't work. Could you
> >> please tell me how to config this timeout?
> >>
> >> Here's my cxf.xml configuration:
> >>
> >>      <http:conduit
> >>
> name="{http://abitab.com.uy/servicios/addressing}AddressingSampleImplPort.
> >> http-conduit">
> >>        <http:client
> >> DecoupledEndpoint="http://localhost:28080/AddressingEndpoint/Addressi
> >> ngEnd
> >> pointServlet"
> >> ReceiveTimeout="300000" />
> >>      </http:conduit>
> >>
> >> And here's my client code:
> >>        URL wsdlURL = new
> >>
> URL("http://localhost:8080/AbitabWSSamples/AddressingSampleImpl?wsdl";);
> >>        AddressingSampleImplService service = new
> >> AddressingSampleImplService(wsdlURL);
> >>        AddressingSample port = service.getAddressingSampleImplPort();
> >>        int result = port.add(1, 2);
> >>        System.out.println(result);
> >>
> >> the service publishes the ws-addressing policy, that's why I only
> >> config the http- conduit
> >>
> >> here's the log:
> >> INFO: Loaded configuration file cxf.xml.
> >> 14/03/2014 11:51:30 AM
> >> org.apache.cxf.service.factory.ReflectionServiceFactoryBean
> >> buildServiceFromWSDL
> >> INFO: Creating Service
> >> {http://abitab.com.uy/servicios/addressing}AddressingSampleImplServic
> >> e from
> >> WSDL: http://localhost:8080/AbitabWSSamples/AddressingSampleImpl?wsdl
> >> 14/03/2014 11:51:30 AM org.apache.cxf.transport.http.HTTPConduit
> >> setUpDecoupledDestination
> >> INFO: creating decoupled endpoint:
> >> http://localhost:28080/AddressingEndpoint/AddressingEndpointServlet
> >> 14/03/2014 11:52:30 AM org.apache.cxf.endpoint.ClientImpl
> >> waitResponse
> >> ADVERTENCIA: Timed out waiting for response to operation
> >> {http://addressing.test/}add.
> >> Exception in thread "main" java.lang.NullPointerException
> >>    at com.sun.proxy.$Proxy40.add(Unknown Source)
> >>    at
> >> test.addressing.cxf.clientsample.AddressingCXFClientSample.main(Addre
> >> ssingC
> >> XFClientSample.java:46)
> >>
> >> thanks in advance
> >> Regards
> 
> --
> Daniel Kulp
> [email protected] - http://dankulp.com/blog Talend Community Coder -
> http://coders.talend.com

Reply via email to