2013-09-21 31 views
0

我们正在使用Apache Camel and Spring将3个使用消息的消费者编写为Activemq队列名称为ThermalMap如何从bean.xml中获取bean值

我是Spring的新手,我尝试从bean.xml获取特定的beanId(“amqLinkId”)值。为此,我编写了以下3个文件。

VariablesDeclarations.java

public class VariablesDeclarations { 
private String amqLink; 
public String getAmqLink() { 
return amqLink; 
} 
public void setAmqLink(String amqLink) { 
this.amqLink = amqLink; 
} 
} 

FirstConsumer.java

import org.apache.camel.CamelContext; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
public class FirstConsumer { 
     public static void main(String[] args) { 
    ApplicationContext contextObject=new ClassPathXmlApplicationContext("bean.xml"); 
     //Forwarding cursor to ConsumersMiddileWare class using CamelContext 
     CamelContext camelObject=contextObject.getBean("activeContext", CamelContext.class); 
     System.out.println("H"); 
} 
} 

ConsumersMiddileware.java

import org.apache.camel.builder.RouteBuilder; 
import org.springframework.beans.factory.BeanFactory; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
public class ConsumersMiddileWare extends RouteBuilder{ 
@Override 
public void configure() throws Exception { 
    System.out.println("Bye"); 
    BeanFactory beanFactory=new ClassPathXmlApplicationContext(new String[]{"bean.xml"}); 
    VariablesDeclarations vd=(VariablesDeclarations) beanFactory.getBean("amqLinkId"); 
    System.out.println(vd.getAmqLink()); 
} 
} 

bean.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation=" 
        http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd 
        http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd 
        "> 

<!-- Creating camelContext element for forwarding to another ConsumersMiddileware class --> 
<camelContext id="activeContext" xmlns="http://camel.apache.org/schema/spring"> 
    <routeBuilder ref="consumerMiddileWareContext" /> 
</camelContext> 
<bean id="consumerMiddileWareContext" class="ActivemqPackage.ConsumersMiddileWare"></bean> 

<!-- Following bean created for getting variable values into classes--> 
<bean id="amqLinkId" class="ActivemqPackage.VariablesDeclarations"> 
    <property name="amqLink" value="activemq:queue:ThermalMap"></property> 
</bean> 
</beans> 

工作流程:

如果运行FirstConsumer.java,应该转发给ConsumersMiddileWare.java。还有我想从bean.xml找到amqLinkId值和分配给任何String对象。

如果我发现amqLinkId值,以后直接我想写下面的代码在ConsumersMiddileWare.java

String activeMqURI=vd.getAmqLink(); 
    from(activeMqURI).to("bean:activemqProcessor?method=processMessage"); 

问题:

如果我触发FirsrConsumer.java,它forwading到ConsumersMiddileWare.java。它的继续打印Bye不以如下方式打印amqLinkId值。

Bye 
Bye 
Bye 
Bye 
. 
. 

任何人都可以解释清楚。

感谢

+0

是什么变量声明类?是安装者 –

+0

是的,我也会把这个类定义。 – Hanumath

+0

@Pratik我添加了'VaribaleDeclaration.java'类代码,并且还在最后添加了2行,您可以检查一次。 – Hanumath

回答

1

有一个SpringRouteBuilder可以用来代替RouteBuilder。这个类有一些额外的方法来从Spring应用程序上下文豆类(如Spring的XML文件)

public class ConsumersMiddileWare extends SpringRouteBuilder{ 
@Override 
public void configure() throws Exception { 
    VariablesDeclarations vd = lookup("amqLinkId", VariablesDeclarations.class)' 
} 

和替代只是使用camelContext.getRegistry在常规RouteBuilder

public class ConsumersMiddileWare extends RouteBuilder{ 
@Override 
public void configure() throws Exception { 
    VariablesDeclarations vd = context().getRegistry().lookup("amqLinkId", VariablesDeclarations.class)' 
} 
+0

谢谢,它工作正常。但我收到以下错误.'org.springframework.beans.factory.BeanCreationException:在类路径资源[bean.xml]中定义名称为'activemqURL'的bean时创建错误:bean的实例化失败;嵌套异常是java.lang.NoClassDefFoundError:javax/jms/ConnectionFactory'。 – Hanumath

+0

我还有一个疑问,我可以在转发时间的同时将'amqLink'从'FirstConsumer.java'传递给'ConsumerMiddileware.java',而不是在'ConsumerMiddileware.java'中手动编写'amqLink'。 – Hanumath

+0

NoClassDefFoundError表示您需要将具有此类的JAR添加到您的类路径中。 –

1

的问题是,你的项目是不是能够找到SLF4J-简单1.6.2.jar。检查您是否在我们的项目构建路径中有它。如果没有添加,然后检查。此外,您所报告的实际问题以及之后编辑的问题完全是不同的问题。

+0

我添加了'slf4j-log4j12-1.7.5.jar'文件。因此我前三行(我在问题中提出的一个概念)不会到来。我仍然不断地获得'再见'。我该如何解决这个问题。 – Hanumath

相关问题