骆驼 AmbiguousMethodCallException 摘要 类
Camel AmbiguousMethodCallException Abstract Classes
我有三个 classes
public abstract FoundationReport
{
public abstract FoundationDetails getDetails();
}
public abstract BaseReport extends FoundationReport
{
public abstract BaseDetails getDetails();
}
public Report extends BaseReport
{
ReportDetails reportDetails;
public ReportDetails getDetails()
{
return reportDetails
}
}
ReportDetails 扩展 BaseDetails,BaseDetails 扩展 FoundationDetails。
在我的骆驼里xml我有一段:
<convertBodyTo type="path.to.Report" />
<when>
<simple>${body.details.type} == 'myself'</simple>
...
但是对 body.details.type 的调用导致:
Caused by: org.apache.camel.component.bean.AmbiguousMethodCallException:
Ambiguous method invocations possible:
[public path.to.ReportDetails path.to.Report.getDetails(),
public abstract path.to.BaseDetails path.to.BaseReport.getDetails(),
public abstract path.to.FoundationDetails path.to.FoundationReport()]
我曾(错误地)假设将使用报告 class 中 getDetails 的唯一具体实现。为什么我会收到此异常,我该如何解决?
* 更新 *
我已将其标记为答案,因为它使用当前版本的 camel 解决了我的问题。然而,Claus Ibsen 的 answer/bug 修复可能会在后续的 camel 版本中解决这种情况。
我相信我已经通过使用 ognl 而不是简单的方法找到了解决方法 - 它不漂亮但它有效。
我已经更换了
<simple>${body.details.type} == 'myself'</simple>
和
<ognl>exchange.getIn().getBody().getDetails().getType() == 'myself'</ognl>
我的想法是我需要访问对象本身而不是依赖基于变量名的预期 getter 签名。好像有用!
这是 Apache Camel 中的一个错误。我已经复制了它,并记录了一张票来解决这个问题:https://issues.apache.org/jira/browse/CAMEL-9032
我有三个 classes
public abstract FoundationReport
{
public abstract FoundationDetails getDetails();
}
public abstract BaseReport extends FoundationReport
{
public abstract BaseDetails getDetails();
}
public Report extends BaseReport
{
ReportDetails reportDetails;
public ReportDetails getDetails()
{
return reportDetails
}
}
ReportDetails 扩展 BaseDetails,BaseDetails 扩展 FoundationDetails。
在我的骆驼里xml我有一段:
<convertBodyTo type="path.to.Report" />
<when>
<simple>${body.details.type} == 'myself'</simple>
...
但是对 body.details.type 的调用导致:
Caused by: org.apache.camel.component.bean.AmbiguousMethodCallException:
Ambiguous method invocations possible:
[public path.to.ReportDetails path.to.Report.getDetails(),
public abstract path.to.BaseDetails path.to.BaseReport.getDetails(),
public abstract path.to.FoundationDetails path.to.FoundationReport()]
我曾(错误地)假设将使用报告 class 中 getDetails 的唯一具体实现。为什么我会收到此异常,我该如何解决?
* 更新 *
我已将其标记为答案,因为它使用当前版本的 camel 解决了我的问题。然而,Claus Ibsen 的 answer/bug 修复可能会在后续的 camel 版本中解决这种情况。
我相信我已经通过使用 ognl 而不是简单的方法找到了解决方法 - 它不漂亮但它有效。
我已经更换了
<simple>${body.details.type} == 'myself'</simple>
和
<ognl>exchange.getIn().getBody().getDetails().getType() == 'myself'</ognl>
我的想法是我需要访问对象本身而不是依赖基于变量名的预期 getter 签名。好像有用!
这是 Apache Camel 中的一个错误。我已经复制了它,并记录了一张票来解决这个问题:https://issues.apache.org/jira/browse/CAMEL-9032