Завершив ввод DSL-пути в POJO, могу ли я зарегистрировать POJO в качестве Бина и вызвать идентификатор для ссылки на него? - PullRequest
0 голосов
/ 30 апреля 2019

Это "очень слабая" проблема, и я просто хочу узнать что-то новое о Camel и о том, как он работает.

Я работаю над созданием службы весенней загрузки с использованием контекстных маршрутов Camel,и пока он работает нормально (пока), я бы хотел установить тип пути отдыха для класса без необходимости явного вызова местоположения пакета, а вместо этого ссылаться на класс как на bean-компонент и использовать его id для его вызова.

Я определил camelContext, у меня есть остальные, restConfigurations и необходимые методы http (get, post, put ...), вот макет того, что у меня есть сейчас.

IМы зарегистрировали класс ServiceImpl как компонент и дали ему идентификатор службы.В Route я могу вызвать bean-компонент с помощью ссылки на его id и выбрать нужный метод.

<beans xmlns ...>
...
    <!-- start services -->
    <bean class="com.daniel.rest-project.services.ServiceImpl" id="Service"/>
    <!-- end services -->
...
    <camelContext id="context" xmlns="http://camel.apache.org/schema/spring">
    <rest bindingMode="au            <!-- <to id="to-7b30ace2-b26d-4301-8bb0-ef007d566ab3" uri="direct:501"/>  -->to" enableCORS="true" id="rest">
...
            <post consumes="application/json" id="newTask" produces="application/json" uri="/task" type="com.daniel.rest-project.vo.TaskVO">
                <description>New Task Object</description>
                <param description="Task Object Body." name="body" required="true" type="body"/>
                <to uri="direct:newTask"/>
            </post>
...
        </rest>
...
        <route id="route-task-new">
            <from id="from-task-new" uri="
           <bean id="to-task-new" method="newTask" ref="Service"/>
        </route>
...
    </camelContext>
</beans>

Теперь я реализовал около 150 маршрутов (проект довольно большой)и я устал от необходимости объявлять тип поста остальных, сейчас он использует что-то не очень похожее на com.daniel.rest-project.vo .. Есть тонна классов, которые названы одинаково и по внутренним причинам, лучше всегопрактики скудны, соглашения об именах странные, мне нужно перейти к нескольким пакетам и т. д.

Было бы гораздо более организованным просто определить все нужные мне объекты в начале XML-файлаи ссылаться на них по ходу дела, вместо того, чтобы каждый раз указывать весь путь, поэтому есть способ, которым я могу определить эти классы в начале, точно так же, как сервисы, и указать пути после поста использование идентификаторабоб, вместо того, чтобы дать ему все местоположение класса?Должен быть способ, и я уверен, что я был достаточно слеп, чтобы не видеть его в документации за последние недели.

Вот один из методов, которые я до сих пор пробовал:

    <!-- start classes -->
    <bean class="com.daniel.rest-project.vo.TaskVO" id="TaskVO"/>
    <!-- end classes -->

и затем укажите путь для выполнения чего-либо подобного

            <post consumes="application/json" id="newTask" produces="application/json" uri="/task" type="TaskVO">
                <description>New Task Object</description>
                <param description="Task Object Body." name="body" required="true" type="body"/>
                <to uri="direct:newTask"/>
            </post>

, что привело к следующей ошибке:

Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create route newTask: Route(newTask)[[From[rest:post:/task?routeId=newTask&... because of java.lang.ClassNotFoundException: TaskVO
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:209)
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:1143)
..........
Caused by: org.apache.camel.RuntimeCamelException: java.lang.ClassNotFoundException: TaskvO
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1830)
    at org.apache.camel.impl.DefaultRouteContext.commit(DefaultRouteContext.java:206)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1307)
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:204)

TaskVO реализует Serializable и имеет только один, пустой, открытый конструктор, за которым следуют все его методы получения и установки.

...