2013-09-21 32 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

相關問題