верблюд rest-dsl в сочетании с https и компонентом undertow - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь настроить https для нескольких верблюжьих маршрутов, используя компонент undertow .Текущая версия верблюда 2.19.4.Код взят из минимального примера:

Non-https-setup выглядит так:

// setup    
restConfiguration()
    .component("undertow")
    .port(8888)
    .contextPath("/api");

// routes
rest("/hello")
    .get()
    .to("direct:hello");
from("direct:hello")
    .setBody(constant("Hello"));

rest("/world")
    .get()
    .to("direct:world");
from("direct:world")
    .setBody(constant("World"));

Пока все работает нормально, я могу получить доступ только к http://localhost:8888/api/hello и http://localhost:8888/api/worldнормально.

Теперь я настроил свое собственное хранилище ключей, создал объект SSLContextParameters и изменил часть установки на это:

UndertowComponent undertow = (UndertowComponent) getContext().getComponent("undertow");
undertow.setSslContextParameters(getSslConfig());

restConfiguration()
    .component("undertow")
    .port(8888)
    .scheme("https")
    .contextPath("/api");

Маршрут остается прежним.Теперь верблюду не удается запустить сервер со следующей ошибкой:

[main] INFO org.apache.camel.impl.DefaultCamelContext - Route: route1 started and consuming from: https://0.0.0.0:8888/api/hello?httpMethodRestrict=GET
[main] INFO org.apache.camel.component.undertow.DefaultUndertowHost - Starting Undertow server on https://0.0.0.0:8888
[main] WARN org.apache.camel.component.undertow.DefaultUndertowHost - Failed to start Undertow server on https://0.0.0.0:8888, reason: java.net.BindException: Address already in use: bind
[main] INFO org.apache.camel.impl.DefaultCamelContext - Apache Camel 2.19.4 (CamelContext: camel-1) is shutting down
[main] INFO org.apache.camel.impl.DefaultShutdownStrategy - Starting to graceful shutdown 15 routes (timeout 300 seconds)
[Camel (camel-1) thread #18 - ShutdownTask] INFO org.apache.camel.component.undertow.DefaultUndertowHost - Stopping Undertow server on https://0.0.0.0:8888
[Camel (camel-1) thread #18 - ShutdownTask] INFO org.apache.camel.impl.DefaultShutdownStrategy - Route: route1 shutdown complete, was consuming from: rest://get:/hello?componentName=undertow&routeId=route1

Однако, если я удаляю одну конечную точку, так что остается только один маршрут, все снова в порядке.Очевидно: только для этого одного маршрута.

То же самое происходит, если я использую альтернативный синтаксис:

from("undertow:https://0.0.0.0:8888/api/hello?method=GET").to("direct:hello");
from("undertow:https://0.0.0.0:8888/api/world?method=GET").to("direct:world");

OK для одного, сбой для нескольких маршрутов.

Как я могу это исправить?(Кстати: первый синтаксис очень предпочтителен, так как некоторые общие параметры, такие как порты, tls-setup, схема, base-path, хранятся в одном месте. Реальная вещь имеет несколько больше маршрутов, чем просто два.)

(Еще одно замечание, которое я заметил, играя с минимальным примером написания этого вопроса: проблема, кажется, специфична для откатов. Компонент причала работает, как и ожидалось.)

1 Ответ

0 голосов
/ 16 февраля 2019

Установите ноль в вашем порту, но вы должны проверить журнал, чтобы увидеть, какой номер порта был назначен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...