Это "очень слабая" проблема, и я просто хочу узнать что-то новое о 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 и имеет только один, пустой, открытый конструктор, за которым следуют все его методы получения и установки.