Reputation: 181
I have been working on Apache camel to connect https URLS' by providing TLS certificate via proxy but getting error org.apache.http.conn.UnsupportedSchemeException: http protocol is not supported
Below is the camel route and ssl context with proxy
public class HttpProxyRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
configureSslForHttp4(getContext());
from("direct:httpproxy")
.log("Invoking dhttpproxy")
.setHeader("CamelHttpMethod")
.simple("GET").setHeader("Accept")
.simple(Constants.JSON_MEDIA_TYPE_VALUE)
.setHeader(Exchange.HTTP_PATH)
.simple("{{http.proxy.path}}")
.setHeader(Exchange.REST_HTTP_QUERY)
.simple("{{http.proxy.query.param}}")
.to("{{http.proxy.url}}")
.log("The Retrival of CCO subscription API response code is: ${header.CamelHttpResponseCode}, JSON Response ${body}")
.end();
}
private void configureSslForHttp4(CamelContext camelContext) {
KeyStore truststore = KeyStore.getInstance("JKS");
truststore.load(getClass().getClassLoader().getResourceAsStream("H:\config/AL/certpath/cert/keystore.jks"), "njfeijiiii".toCharArray());
TrustManagerFactory trustFactory = TrustManagerFactory.getInstance("SunX509");
trustFactory.init(truststore);
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, trustFactory.getTrustManagers(), null);
SSLSocketFactory factory = new SSLSocketFactory(sslcontext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
SchemeRegistry registry = new SchemeRegistry();
final Scheme scheme = new Scheme("https4", 443, factory);
registry.register(scheme);
HttpComponent http4 = camelContext.getComponent("https4", HttpComponent.class);
http4.setHttpClientConfigurer(new HttpClientConfigurer() {
@Override
public void configureHttpClient(HttpClientBuilder builder) {
builder.setSSLSocketFactory(factory);
HttpHost proxy = new HttpHost("MYcompany.proxy",8080);
builder.setProxy(proxy);
builder.setRoutePlanner(new DefaultProxyRoutePlanner(proxy));
Registry registry = RegistryBuilder.create().register("https", factory).build();
HttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager(registry);
builder.setConnectionManager(connectionManager);
}});
}
}
Error being encountered
org.apache.catalina.core.ApplicationContext logINFO: Initializing Spring FrameworkServlet 'dispatcherServlet'43953 [http-nio-6723-exec-2] INFO org.springframework.web.servlet.DispatcherServlet -FrameworkServlet 'dispatcherServlet': initialization started44033 [http-nio-6723-exec-2] INFO org.springframework.web.servlet.DispatcherServlet -FrameworkServlet 'dispatcherServlet': initialization completed in 80 ms44126 [http-nio-6723-exec-2] INFO com.db.gtbb.adapter.controller.HttpProxyRestController -httpProxyHandler has been started!44152 [http-nio-6723-exec-2] INFO route1 -Invoking dhttpproxy 44291 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec -I/O exception (org.apache.http.conn.UnsupportedSchemeException) caught when processing request to {tls}->http://mycompany.proxy:8080->https://mycompany.target:443: http protocol is not supported44293 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec -Retrying request to {tls}->http://mycompany.proxy:8080->https://mycompany.target:44344296 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec -I/O exception (org.apache.http.conn.UnsupportedSchemeException) caught when processing request to {tls}->http://mycompany.proxy:8080->https://mycompany.target:443: http protocol is not supported44296 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec -Retrying request to {tls}->http://mycompany.proxy:8080->https://mycompany.target:44344296 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec -I/O exception (org.apache.http.conn.UnsupportedSchemeException) caught when processing request to {tls}->http://mycompany.proxy:8080->https://mycompany.target:443: http protocol is not supported44296 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec -Retrying request to {tls}->http://mycompany.proxy:8080->https://mycompany.target:44344301 [http-nio-6723-exec-2] ERROR org.apache.camel.processor.DefaultErrorHandler -Failed delivery for (MessageId: ID-SGSINSD822483-57673-1614083753968-0-1on ExchangeId: ID-SGSINSD822483-57673-1614083753968-0-2). Exhausted after delivery attempt: 1 caught: org.apache.http.conn.UnsupportedSchemeException: http protocol is not supportedMessage History---------------------------------------------------------------------------------------------------------------------------------------RouteId ProcessorId Processor Elapsed (ms)[route1 ] [route1 ] [ ] [ 155][route1 ] [log1 ] [log ] [ 6][route1 ] [setHeader1 ] [setHeader[CamelHttpMethod] ] [ 3][route1 ] [setHeader2 ] [setHeader[Accept] ] [ 2][route1 ] [setHeader3 ] [setHeader[CamelHttpPath] ] [ 2][route1 ] [setHeader4 ] [setHeader[CamelRestHttpQuery] ] [ 16][route1 ] [to1 ] [{{http.proxy.url}} ] [ 118]Stacktrace--------------------------------------------------------------------------------------------------------------------------------------- org.apache.http.conn.UnsupportedSchemeException: http protocol is not supportedat org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:108)at org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect(BasicHttpClientConnectionManager.java:338)at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:388)at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)at org.apache.camel.component.http4.HttpProducer.executeMethod(HttpProducer.java:306)at org.apache.camel.component.http4.HttpProducer.process(HttpProducer.java:178)at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145)at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542)at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)at org.apache.camel.processor.Pipeline.process(Pipeline.java:120)at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197)at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:62)at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97)at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:529)at org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:497)at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:365)at org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:497)at org.apache.camel.impl.ProducerCache.send(ProducerCache.java:209)at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:139)at org.apache.camel.impl.DefaultProducerTemplate.send(DefaultProducerTemplate.java:125)at com.db.gtbb.adapter.controller.HttpProxyRestController.httpProxyHandler(HttpProxyRestController.java:27)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:107)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)44318 [http-nio-6723-exec-2] INFO
Upvotes: 0
Views: 819
Reputation: 1
you need to add http protocol to registry:
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslctxt, hnv);
Registry<ConnectionSocketFactory> lookup = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", sslSocketFactory).build();
Upvotes: 0