【发布时间】:2021-02-24 05:30:13
【问题描述】:
我一直在使用 Apache camel 通过代理提供 TLS 证书来连接 https URL,但出现错误 org.apache.http.conn.UnsupportedSchemeException: http 协议不受支持
下面是带代理的骆驼路由和ssl上下文
公共类 HttpProxyRouter 扩展 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);
}});
}
}
遇到错误
org.apache.catalina.core.ApplicationContext logINFO: Initializing Spring FrameworkServlet 'dispatcherServlet'43953 [http-nio-6723-exec-2] INFO org.springframework.web.servlet.DispatcherServlet -FrameworkServlet 'dispatcherServlet': 初始化开始44033 [http-nio-6723-exec-2] INFO org.springframework.web.servlet.DispatcherServlet -FrameworkServlet 'dispatcherServlet':初始化在 80 ms44126 内完成 [http-nio-6723-exec-2] INFO com.db.gtbb。 adapter.controller.HttpProxyRestController -httpProxyHandler 已启动!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 异常 (org.apache.http.conn.UnsupportedSchemeException) 在处理对 {tls} 的请求时捕获-> http://mycompany.proxy:8080->https://mycompany.target:443: http 协议不受支持44293 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec -重试对 {tls}->http://mycompany.proxy:8080->https://mycompany.target:44344296 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain 的请求。 RetryExec -I/O 异常 (org.apache.http.conn.UnsupportedSchemeException) 在处理对 {tls}->http://mycompany.proxy:8080->https://mycompany.target:443: http 协议的请求时捕获不支持44296 [http-nio-6723-exec-2] INFO org.apache.http.impl.execchain.RetryExec - 重试对 {tls} 的请求->http://mycompany.proxy:8080->https:// mycompany.target:44344296 [http-nio-6723-exec-2] 信息 org.apache.http.impl.execchain.RetryExec -I/O 异常 (org.apache.http.conn.UnsupportedSchemeException)在处理对 {tls}->http://mycompany.proxy:8080->https://mycompany.target:443 的请求时捕获:不支持 http 协议44296 [http-nio-6723-exec-2] INFO org。 apache.http.impl.execchain.RetryExec - 重试请求 {tls}->http://mycompany.proxy:8080->https://mycompany.target:44344301 [http-nio-6723-exec-2] 错误org.apache.camel.processor.DefaultErrorHandler - (MessageId: ID-SGSINSD822483-57673-1614083753968-0-1on ExchangeId: ID-SGSINSD822483-57673-1614083753968-0-2) 交付失败。交付尝试后用尽:1 捕获:org.apache.http.conn.UnsupportedSchemeException: http 协议不支持消息历史记录-------------------------- -------------------------------------------------- -------------------------------------------------- ---------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 协议不支持在 org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:108) 在 org.apache.http.impl.conn.BasicHttpClientConnectionManager.connect( BasicHttpClientConnectionManager.java:338) 在 org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:388) 在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) 在 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) 在 org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) 在 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) 在 org.apache.camel.processor.SendProcessor.process(SendProcessor.java:145) 在 org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 在 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) 在 org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalPr处理器.java:197) 在 org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97) 在 org.apache.camel.impl.ProducerCache$1.doInProducer(ProducerCache.java:529) 在 org.apache.camel.impl.ProducerCache$1 .doInProducer(ProducerCache.java:497) 在 org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:365) 在 org.apache.camel.impl.ProducerCache.sendExchange(ProducerCache.java:497) 在 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.send(DefaultProducerTemplate.java:139) java:125) 在 com.db.gtbb.adapter.controller.HttpProxyRestController.httpProxyHandler(HttpProxyRestController.java:27) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Metho d.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) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:第827章, 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 在 org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:970) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 在 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(Appli cationFilterChain.java:207) 在 org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 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) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 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.doFilte r(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal (HttpPutFormContentFilter.java:89) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 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) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 在 org.springframework .web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java :240) 在 org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:107) 在 org.springframework.web 的 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)。 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)在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 在 org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 在 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) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 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] 信息
【问题讨论】:
标签: apache-camel