2012-04-11 53 views
1

我有两个不同的服务在Web服务器上运行。这两个服务都有一个名为'xyz'的操作,并带有以下参数。如何确定骆驼交换对象的类型

服务1:

Public String xyx(Student object) {}

服务2:

public String xyz(Employee object){}

现在我有一个客户端,它会调用基于它接收到的消息,这些服务中的一个的操作。该消息将作为骆驼交换接收。所以我需要确定消息的类型,然后调用相应的服务。

我如何识别作为骆驼交换接收的消息的原始类型。

谢谢。

+0

只是一个想法的,为什么不倾头的日志组件,它将打印他们到码头。也许头文件中有些东西可以帮助您确定如何区分它们。 – Namphibian 2012-04-11 05:44:10

回答

6

我会在头文件中设置一个值来指示它是哪个服务,然后在骆驼路由上发送这个值。这种方法只是这样做的一种方式。 Christian Schneider有另一个很好的解决方案,我现在可能会使用更多的解决方案,因为我现在已经更多地使用了骆驼。但是,两者都会达到同样的效果,并且取决于你问的人可能比其他人更清楚。

例如,你可以这样做:

public void foo(Exchange exchange){ 

exchange.getIn().setHeader("MsgType", "Student"); 

} 

然后,您可以在任何在Java DSL,甚至春季DSL头过滤。

在Java DSL,你会做这样的事情(伪代码)

from("foo:incommingroute") 
.choice() 
.when(header("MsgType").equals("Student")) 
    .to("webservice:Student") 
.when(header("MsgType").equals("Employee")) 
    .to("webservice:Employee") 
.otherwise() 
    .to("jms:Deadletter") 
.end(); 

在Spring DSL,你会做这样的事情(伪代码)

<route> 
<from uri="foo:incommingroute"/> 
    <choice> 
    <when> 
     <simple>${header.MsgType} equals 'Student'</simple> 
     <to uri="webservice:Student"/> 
    </when> 
    <when> 
     <simple>${header.MsgType} equals 'Employee'</simple> 
     <to uri="webservice:Employee"/> 
    </when> 
    <otherwise> 
     <to uri="jms:badOrders"/> 
    <stop/> 
</otherwise> 
</choice> 
<to uri="jms:Deadletter"/> 
</route> 

您也可以看看在这个链接http://camel.apache.org/content-enricher.html丰富模式。基本上我建议遵循丰富的模式。如果你能告诉我你是怎么给骆驼发送消息的,那么我可能会帮助更多。

希望这给你一些想法,如果在代码中有语法错误等,抱歉,我在公交车站,没有时间检查它。 。

5

尝试exchange.getIn()getBody()的instanceof学生

+0

简短而甜美。我喜欢。 – Namphibian 2012-04-12 06:33:04

2

或者你也可以做这样的事情:

from("foo:incommingroute") 
    .choice() 
     .when(simple("${body} is 'java.lang.String'")) 
      .to("webservice:Student") 
     .when(simple("${body} is 'foo.bar.Employee'")) 
      .to("webservice:Employee") 
     .otherwise() 
      .to("jms:Deadletter") 
     .end();