簡體   English   中英

Camel-cxf:端口的協議不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM