问题可能也与我对这个概念的理解有关。ActionClass
正在调用代理bean,它是Account ting Interface
。代理bean接口是使用Account ting Util
类实现的。所以我期待Account ting Util
返回的xml
通过seda:会计师队列
传递,然后在控制台上流式传输。
Application Context
<bean id="accountingInterface" class="org.apache.camel.spring.remoting.CamelProxyFactoryBean">
<property name="serviceUrl" value="seda:accountingQueue"/>
<property name="serviceInterface" value="acord.transaction.util.AccountingInterface"/>
</bean>
<route>
<from uri="seda:accountingQueue"/>
<setHeader headerName="nowInMillis">
<groovy>new Date().getTime()</groovy>
</setHeader>
<to uri="stream:out"/>
</route>
会计界面
public interface AccountingInterface
{
void send(String xml);
String accountingUpdate(EDITDate accountingProcessDate);
}
会计Util
public class AccountingUtil implements AccountingInterface
{
public String accountingUpdate(EDITDate accountingProcessDate)
{
//doSomething
return xml;
}
动作课
AccountingInterface accountingInterface = (AccountingInterface) AppContext.getBean("accountingInterface");
accountingInterface.accountingUpdate(accountingProcessDate);
但是我有例外:
No body available of type: java.lang.String but has value: BeanInvocation public abstract java.lang.String acord.transaction.util.AccountingInterface.accountingUpdate(edit.common.EDITDate) with [2012/11/08]] of type: org.apache.camel.component.bean.BeanInvocation on: Message: BeanInvocation public abstract java.lang.String acord.transaction.util.AccountingInterface.accountingUpdate(edit.common.EDITDate) with [2012/11/08]]. Caused by: No type converter available to convert from type: org.apache.camel.component.bean.BeanInvocation to the required type: java.lang.String with value BeanInvocation public abstract java.lang.String acord.transaction.util.AccountingInterface.accountingUpdate(edit.common.EDITDate) with [2012/11/08]]. Exchange[Message: BeanInvocation public abstract java.lang.String acord.transaction.util.AccountingInterface.accountingUpdate(edit.common.EDITDate) with [2012/11/08]]]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: org.apache.camel.component.bean.BeanInvocation to the required type: java.lang.String with value BeanInvocation public abstract java.lang.String acord.transaction.util.AccountingInterface.accountingUpdate(edit.common.EDITDate) with [2012/11/08]]]
at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:101)
还有一个问题,我可以为单个proxyBean(接口)
提供多个serviceURL
我希望使用不同的方法调用不同的serviceURL
,但只是单个接口的一部分。
更新:啊,刚刚理解了你的问题。一开始有点领先。
在执行代理Camel时,会将调用(对哪个方法/接口和哪些参数)转换为BeanInvoke对象。然后将其传递给要处理的Camelendpoint(在您的情况下为seda)。但是您正在尝试将其打印到std out,而不是调用Account ingInterface
的bean实例(例如Account ingUpdateACORDUtil
在您的情况下)。
不,不同的方法会调用相同的URL,但是。。嗯,行业的不同方法
。当然,这可以通过使用驼峰路由来实现,比如首先将请求发送到一个简单的direct:routeAccountingRequest
,然后查看调用的方法,以确定它应该在选择构造中到达哪个endpoint。
您可以使用带有ProducerTemplate的普通对象构建自己的逻辑来完成诸如发送字符串、调用不同方法等任务。代理用于代理bean调用。
我目前正在尝试熟悉Servicemix、Camel、CXF等,我的问题与四年前的一些人基本相同:如何将Camel中的BeaninJournal对象转换为消息正文和标题?不幸的是,答案对我帮助不大。正如其中一个答案所提到的:Camel网站上的所有示例都与从CXF向bean发送内容有关。 我在POJO中使用了一个bean代理endpoint,通过 当我在另一端使用另一个beanendpoint,为该接
我创建了一个路由器类,并在@Configuration中标记为@Bean。有一件事我不太确定,那就是camel会多久调用一次数据库以获取select结果?一旦我在数据库中有了一个新条目,camel就会检索并处理它。
我试图得到一个代理工作与蓝图在OSGi(正在通过Karaf)正确,并通过Gradle构建。 我的蓝图文件(名字已经改变,以保护无辜): 我对此感到非常困惑,因为它在抱怨Camel上下文中的标记。我在其他地方使用了完全相同的语法(只是一个不同的包),没有问题。 最后一个“错误”是: RuntimeException:放弃等待服务(ObjectClass=org.apache.camel.CamelC
我已经创建了一个服务代理。 代理(请求类型为)和实际服务(请求类型。)之间有一个处理器。 进入< code > process(Exchange Exchange)方法的交换体属于< code>TypeA。 我能够使用下面的代码行访问数据 现在,我想将此信息更改为。 我使用下面的代码添加主体。 我得到了 现在,我想使用调用真正的服务,它来自。 我尝试进入处理器,但出现以下异常 真正的Web服务没有
我正在尝试从目录中选取一个文件,拆分一个文件,并将每一个拆分行添加到ActiveMQ中。我在这个过程中遇到了异常处理的问题。假设目录中的文件是一个二进制文件(可执行文件),那么splitter会显示org.apache.camel.runtimeCamelException和java.nio.charset.MalFormedInputException异常。如果出现这种情况,那么我需要捕获这些异
我刚刚开始研究apache camel(使用蓝图路线),我已经被卡住了。 我需要处理一组不同格式的csv文件。我有5个文件,foo_X_X指定csv文件的类型,文件有日期戳。这些文件可能很大,所以一旦写入所有文件,就会写入一个“完成”文件。完成的文件名为foo_trigger_20160110.csv. 我在文件中看到了doneFileName选项,但它只支持静态名称(我在文件名中有一个日期),或