Hi Andriy,

thanks for your reply. I attached the stacktrace of the stuck call. This should 
give you the details you ask for, right?

Best regards,
Manuel

-----Original Message-----
From: Andriy Redko <drr...@gmail.com> 
Sent: Dienstag, 17. August 2021 01:46
To: Shenavai, Manuel <manuel.shena...@sap.com>; dev@cxf.apache.org
Subject: Re: External WSDLS and connection/read timeouts

Hi Manuel,

AFAIK CXF does not use 
org.springframework.core.io.AbstractFileResolvingResource (at least, directly).
Could you please trace where the last resource fetching attempt is coming from?
Thank you.

Best Regards,
    Andriy Redko

SM> Hi everyone,

SM> we are using Camel CXF and found the following problem:
SM> It can happen that a route is trying to start for an infinite amount of 
time due to missing response from WSDL endpoint.

SM> Setup:
SM> A CXF endpoint that is using an external WSDL (i.e. 
wsdlURL=http://someHost/test/wsdl)
SM> The WSDL endpoint is not responding
SM> A conduit configured with 100ms timeouts (connections- and read-timeout)

SM> Test:
SM> I attached a sample app to this mail. To start the application, start 
DemoApplication.java. It will start a camel route containing a CXF endpoint. 
The CXF endpoint in the route tries to read an external WSDL. The endpoint for 
this WSDL is doing a 15 minute sleep before responding to simulate a "no 
response from WSDL endpoint" (implemented in RouteController). The conduit is 
configured with 100ms timeouts for connection- and readtimeout

SM> The application will fail to start if the route cannot be started. Since 
the WSDL can't be fetched within the 100ms timeout, I would expect the 
app-startup to fail at least within 1 minute. However the startup seems to go 
on for an infinite amount of time.


SM> I did some debugging and found several requests are done for the WSDL with 
different timeouts (in this order):


SM>   1.  org.apache.cxf.transport.http.URLConnectionHTTPConduit:134

SM>   *   connectionTimeout 100 ms
SM>   *   readTimeout 100 ms
SM>   *   timeout-values are taken from conduit


SM>   1.  org.apache.cxf.resource.URIResolver:282

SM>   *   connectionTimeout 30 seconds
SM>   *   readTimeout 60 seconds
SM>   *   hardcoded values


SM>   1.  org.springframework.core.io.AbstractFileResolvingResource:60

SM>   *   connectionTimeout 0 //infinite waiting
SM>   *   readTimeout 0  //infinite waiting
SM>   *   no explicit timeouts are set

SM> Our main problem here is the last request that has no timeout configured at 
all. I attached the stacktrace of the blocked thread.

SM> I would expect that the timeouts from the conduit are applied. This seems 
not to be the case so I think this is a bug. What do you think?

SM> Thanks in advance
SM> Best regards,
SM> Manuel

"main@1" prio=5 tid=0x1 nid=NA runnable
  java.lang.Thread.State: RUNNABLE
          at java.net.SocketInputStream.socketRead0(SocketInputStream.java:-1)
          at java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
          at java.net.SocketInputStream.read(SocketInputStream.java:168)
          at java.net.SocketInputStream.read(SocketInputStream.java:140)
          at java.io.BufferedInputStream.fill(BufferedInputStream.java:252)
          at java.io.BufferedInputStream.read1(BufferedInputStream.java:292)
          at java.io.BufferedInputStream.read(BufferedInputStream.java:351)
          - locked <0x20fe> (a java.io.BufferedInputStream)
          at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:754)
          at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689)
          at 
sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1615)
          - locked <0x20ff> (a sun.net.www.protocol.http.HttpURLConnection)
          at 
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)
          at 
java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
          at 
org.springframework.core.io.AbstractFileResolvingResource.exists(AbstractFileResolvingResource.java:60)
          at 
org.apache.cxf.bus.spring.BusApplicationContextResourceResolver.getAsStream(BusApplicationContextResourceResolver.java:47)
          at 
org.apache.cxf.resource.DefaultResourceManager.findResource(DefaultResourceManager.java:115)
          at 
org.apache.cxf.resource.DefaultResourceManager.getResourceAsStream(DefaultResourceManager.java:67)
          at 
org.apache.cxf.wsdl11.ResourceManagerWSDLLocator.getInputSource(ResourceManagerWSDLLocator.java:55)
          at 
org.apache.cxf.wsdl11.ResourceManagerWSDLLocator.getInputSource(ResourceManagerWSDLLocator.java:49)
          at 
org.apache.cxf.wsdl11.AbstractWrapperWSDLLocator.getBaseInputSource(AbstractWrapperWSDLLocator.java:73)
          at 
org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:225)
          at 
org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:165)
          at 
org.apache.camel.component.cxf.CxfEndpoint.getServiceNameAsQName(CxfEndpoint.java:800)
          at 
org.apache.camel.component.cxf.CxfEndpoint.setupServerFactoryBean(CxfEndpoint.java:301)
          at 
org.apache.camel.component.cxf.CxfSpringEndpoint.createServerFactoryBean(CxfSpringEndpoint.java:148)
          at 
org.apache.camel.component.cxf.CxfConsumer.createServer(CxfConsumer.java:72)
          at 
org.apache.camel.component.cxf.CxfConsumer.doStart(CxfConsumer.java:106)
          at 
org.apache.camel.support.service.BaseService.start(BaseService.java:115)
          - locked <0x2100> (a java.lang.Object)
          at 
org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:113)
          at 
org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3474)
          at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:401)
          at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:319)
          at 
org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:213)
          - locked <0x2101> (a 
org.apache.camel.impl.engine.InternalRouteStartupManager)
          at 
org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:147)
          at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3177)
          at 
org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2861)
          at 
org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2812)
          at 
org.apache.camel.support.service.BaseService.start(BaseService.java:115)
          - locked <0x2102> (a java.lang.Object)
          at 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2507)
          at 
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:174)
          at 
org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:107)
          at 
org.apache.camel.spring.xml.CamelContextFactoryBean.start(CamelContextFactoryBean.java:413)
          at 
org.apache.camel.spring.xml.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:468)
          at 
org.apache.camel.spring.xml.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:97)
          at 
org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
          at 
org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
          at 
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
          at 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:421)
          at 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:378)
          at 
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:938)
          at 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
          - locked <0x2103> (a java.lang.Object)
          at 
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)
          at 
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782)
          at 
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774)
          at 
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439)
          at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:339)
          at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1340)
          at 
org.springframework.boot.SpringApplication.run(SpringApplication.java:1329)
          at de.mash.demo.DemoApplication.main(DemoApplication.java:12)

Reply via email to