其余的DSL路径键入POJO,我可以将POJO注册为Bean并调用ID进行引用吗?

时间:2019-04-30 16:09:50

标签: spring-boot apache-camel spring-camel spring-dsl

这是一个影响很小的“问题”,我只是希望了解有关Camel及其工作原理的新知识。

我正在使用骆驼上下文路由来构建springboot服务,尽管它工作正常(到目前为止),但我想将rest路径类型设置为一个类,而不必显式调用包位置,并且而是将类作为bean引用,并使用其id进行调用。

我已经定义了一个camelContext,我拥有其余的,restConfigurations和必要的http方法(get,post,put ...),这是我现在拥有的东西的一个模拟。

我已经将ServiceImpl类注册为Bean,并为其指定了ID Service。在Route中,我可以使用对它的ID的引用来调用Bean,然后选择所需的方法。

<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文件的开头定义我需要的所有对象并随即引用它们时,感觉会更有条理,而不必每次都在其中陈述整个过程,所以,有没有办法我可以像服务一样在开始时定义这些类,并告诉post rest路径使用bean的id,而不必给它整个类的位置?必须有一种方法,而且我敢肯定,过去几周我一直视而不见,看不到它。

这是到目前为止我尝试过的方法之一:

    <!-- 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,并且只有一个空的公共构造函数,然后是所有的getter和setter。

0 个答案:

没有答案