[英]Camel-cxf: Protocol mismatch for port
我正在嘗試將 ssl 參數添加到我的駱駝 cxf 消費者端點。 使用其他端點就像創建一個 bean 一樣簡單:
@Bean("sslParams")
public SSLContextParameters sslContextParameters() {
//Keystore
KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("./my_keystore.jks");
ksp.setPassword("secret1");
KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyPassword("secret2");
kmp.setKeyStore(ksp);
//Truststore
KeyStoreParameters tsp = new KeyStoreParameters();
tsp.setResource("./my_truststore.jks");
tsp.setPassword("secret2");
TrustManagersParameters tmp = new TrustManagersParameters();
tmp.setKeyStore(tsp);
//SSL Context
SSLContextParameters sslContextParameters = new SSLContextParameters();
sslContextParameters.setKeyManagers(kmp);
sslContextParameters.setTrustManagers(tmp);
return sslContextParameters;
}
並使用端點的sslContextParameters選項引用該 bean,如下所示:
from("cxf://https://localhost:8089/fsm-booking?serviceClass=com.hitrail.fsm.RailServiceProviderBookingServiceImpl" +
"&wsdlUrl=ServiceModel-WSDL/Booking/RailServiceProviderBookingService.wsdl&dataFormat=RAW&sslContextParameters=#sslParams" +
"&continuationTimeout=30000")
.routeId("cxf-route")
.log("${body}");
當我使用 camel-cxf 組件執行此操作時,雖然我得到了這個異常:
org.apache.camel.RuntimeCamelException: java.lang.RuntimeException: Protocol mismatch for port 8089: engine's protocol is http, the url protocol is https
at org.apache.camel.RuntimeCamelException.wrapRuntimeCamelException(RuntimeCamelException.java:51)
at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:109)
at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:139)
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)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:326)
at nl.camel.test.App.main(App.java:48)
Caused by: java.lang.RuntimeException: Protocol mismatch for port 8089: engine's protocol is http, the url protocol is https
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.finalizeConfig(JettyHTTPDestination.java:168)
at org.apache.cxf.transport.http.HTTPTransportFactory.getDestination(HTTPTransportFactory.java:288)
at org.apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTransportFactory.java:135)
at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:85)
at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:64)
at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:182)
at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:211)
at org.apache.camel.component.cxf.CxfConsumer.createServer(CxfConsumer.java:74)
at org.apache.camel.component.cxf.CxfConsumer.doStart(CxfConsumer.java:106)
at org.apache.camel.support.service.BaseService.start(BaseService.java:115)
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)
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.spring.boot.SpringBootCamelContext.doStart(SpringBootCamelContext.java:43)
at org.apache.camel.support.service.BaseService.start(BaseService.java:115)
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)
... 14 common frames omitted
Caused by: java.io.IOException: Protocol mismatch for port 8089: engine's protocol is http, the url protocol is https
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory.createJettyHTTPServerEngine(JettyHTTPServerEngineFactory.java:277)
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory.createJettyHTTPServerEngine(JettyHTTPServerEngineFactory.java:307)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.retrieveEngine(JettyHTTPDestination.java:134)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.finalizeConfig(JettyHTTPDestination.java:166)
... 37 common frames omitted
我需要設置另一個選項來更改引擎協議嗎? 對此的一些見解將不勝感激。
可能您需要配置底層 CXF HTTPConduit
以在 SSL 中工作。 更多信息可以在這里找到。
我知道以編程方式完全配置自定義Bus
也意味着(然后在您的 Camel cxf 端點中使用“?bus = ...”引用它)。
BusFactory bf = BusFactory.newInstance();
Bus bus = bf.createBus();
CamelTransportFactory camelTransportFactory = new CamelTransportFactory();
camelTransportFactory.setCamelContext(context)
ConduitInitiatorManager cim = bus.getExtension(ConduitInitiatorManager.class);
cim.registerConduitInitiator(CamelTransportFactory.TRANSPORT_ID, camelTransportFactory);
DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
dfm.registerDestinationFactory(CamelTransportFactory.TRANSPORT_ID, camelTransportFactory);
BusFactory.setDefaultBus(bus);
另請參閱此線程: apache 駱駝 cxf https 不工作
祝你好運 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.