Hi everyone, we are using Camel CXF and found the following problem: It can happen that a route is trying to start for an infinite amount of time due to missing response from WSDL endpoint.
Setup: A CXF endpoint that is using an external WSDL (i.e. wsdlURL=http://someHost/test/wsdl) The WSDL endpoint is not responding A conduit configured with 100ms timeouts (connections- and read-timeout) Test: 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 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. I did some debugging and found several requests are done for the WSDL with different timeouts (in this order): 1. org.apache.cxf.transport.http.URLConnectionHTTPConduit:134 * connectionTimeout 100 ms * readTimeout 100 ms * timeout-values are taken from conduit 1. org.apache.cxf.resource.URIResolver:282 * connectionTimeout 30 seconds * readTimeout 60 seconds * hardcoded values 1. org.springframework.core.io.AbstractFileResolvingResource:60 * connectionTimeout 0 //infinite waiting * readTimeout 0 //infinite waiting * no explicit timeouts are set Our main problem here is the last request that has no timeout configured at all. I attached the stacktrace of the blocked thread. 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? Thanks in advance Best regards, Manuel
<<attachment: test.zip>>
"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)
