首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Camel-cxf:端口协议不匹配

Camel-cxf:端口协议不匹配
EN

Stack Overflow用户
提问于 2021-05-04 15:18:36
回答 1查看 302关注 0票数 0

我正在尝试将ssl参数添加到我的camel cxf使用者端点。对于其他端点,只需创建一个bean即可:

代码语言:javascript
复制
    @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,如下所示:

代码语言:javascript
复制
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组件执行此操作时,会得到以下异常:

代码语言:javascript
复制
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

是否还需要设置另一个选项来更改引擎协议?对此有一些见解将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2021-05-05 08:03:28

您可能需要配置基础CXF HTTPConduit以在SSL中工作。更多信息可以找到这里

我知道还需要以编程方式完全配置自定义Bus (然后在Camel cxf端点中使用“?bus=.”引用它)。

代码语言:javascript
复制
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 camel cxf https不工作

祝你好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67387557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档