Возникла ошибка при запуске CamelContext из методов Camel Junit - PullRequest
0 голосов
/ 05 марта 2019

Я пишу тестовые случаи Junit для моих верблюжьих маршрутов. Один из верблюжьих маршрутов включает в себя REST DSL, как показано ниже

restConfiguration()
        .component("jetty")
        .host("0.0.0.0")
        .port(this.port)
        .scheme("https")
        .endpointProperty("sslContextParameters", "#sslContextParameters");

Пожалуйста, найдите ниже один из тестовых случаев.

@Test
    public void testSampleService() throws Exception {
        context.start();
        ...
        MockEndpoint mock = getMockEndpoint("mock:mockEndPoint");
        mock.expectedMessageCount(1);
            ...
        context.stop();
    }

В context.start () я получаю исключение, как показано ниже. Однако, когда я изменяю схему https на http и закомментирую endpointProperty для sslContextParameters, она отлично работает.

IllegalStateException: No protocol factory for default protocol 'ssl-http/1.1' in ServerConnector@52bba91a{ssl-http/1.1,[ssl, http/1.1]}{0.0.0.0:9091}
    at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:267)
    at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:81)
    at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:238)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.server.Server.doStart(Server.java:397)

Я настроил SSL для Jetty в моем Camel-контексте, как показано ниже

<bean id="sslContextParameters" class="org.apache.camel.util.jsse.SSLContextParameters">
    <property name="keyManagers">
      <bean class="org.apache.camel.util.jsse.KeyManagersParameters">
        <property name="keyPassword" value="${app.fuse.keymanager.password}" />
        <property name="keyStore">
          <bean class="org.apache.camel.util.jsse.KeyStoreParameters">
            <property name="resource" value="${app.fuse.keystore.path}" />
            <property name="type" value="JKS" />
            <property name="password" value="${app.fuse.keystore.password}" />
            <property name="camelContext" ref="ctx" />
          </bean>
        </property>
        <property name="camelContext" ref="ctx" />
      </bean>
    </property>
    <property name="camelContext" ref="ctx" />
  </bean>

И используя нижеприведенные зависимости в моем pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jetty</artifactId>
    <version>2.17.0.redhat-630224</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.4.8.v20171121</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-io</artifactId>
    <version>9.4.8.v20171121</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-continuation</artifactId>
    <version>9.4.8.v20171121</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-http</artifactId>
    <version>9.4.8.v20171121</version>
</dependency>

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jaas</artifactId>
    <version>9.4.8.v20171121</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-security</artifactId>
    <version>9.4.8.v20171121</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-servlet</artifactId>
    <version>9.4.8.v20171121</version>
    <scope>test</scope>
</dependency>
...