gpt4 book ai didi

java - Apache Camel 代理不工作

转载 作者:行者123 更新时间:2023-12-01 04:36:22 25 4
gpt4 key购买 nike

问题可能也与我对这个概念的理解有关。
ActionClass 正在调用代理 bean,即 AccountingInterface。代理bean接口(interface)是通过AccountingUtil类实现的。因此,我期望由 AccountingUtil 返回的 xml 通过 seda:accountingQueue 传递,然后在控制台上流出。
应用程序上下文

    <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);
}

AccountingUtil

public class AccountingUtil implements AccountingInterface
{
public String accountingUpdate(EDITDate accountingProcessDate)
{
//doSomething
return xml;
}

Action 类

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(interface) 设置多个 serviceURL 吗?
我想要不同的方法来调用不同的serviceURL,但属于单个接口(interface)的一部分。

最佳答案

更新:啊,刚刚明白你的问题。一开始就有点第一。

当进行代理时,Camel 会将调用(对哪个方法/接口(interface)以及什么参数)转换为 BeanInitation 对象。然后将其传递给选择的 Camel 端点(在您的情况下是 seda)进行处理。但是您试图将其打印到标准输出,而不是调用AccountingInterface的bean实例(例如您的情况下的AccountingUpdateACORDUtil)。

不,不同的方法将调用相同的 URL,但使用 .. BeanInitation 中的不同方法。这当然可以通过在 Camel 路由中路由您的请求来实现,例如首先将其发送到一个简单的 direct:routeAccoutingRequest 然后查看调用的方法以找出它应该在选择中转到哪个端点构造。

您可以使用带有 ProducerTemplates 的普通对象来构建自己的逻辑,以实现发送字符串、调用不同方法等功能。代理用于代理 bean 调用。

关于java - Apache Camel 代理不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17285259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com