天天看點

使用Spring BlazeDS出現Error creating bean with name '_messageBroker': Invocation***

我這裡的情況其實是在寫Junit的時候出現的這個錯誤,但是應該還會有很多類似的其他情況出現這種問題,廢話不多,錯誤如下

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_messageBroker': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanInitializationException: MessageBroker initialization failed; nested exception is java.lang.NullPointerException

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_messageBrokerDefaultHandlerMapping': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '_messageBroker': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanInitializationException: MessageBroker initialization failed; nested exception is java.lang.NullPointerException

在Spring的官網上有類似這樣回答的

http://forum.springsource.org/showthread.php?71492-Issue-upgrading-to-RC1-Init-method-failed

說在spring-flex的配置檔案裡把

<flex:message-broker />

改成

<bean id="_messageBroker" class="org.springframework.flex.core.MessageBrokerFactoryBean" />

但是不管用,并且即便管用,也不會解決根本問題,不過看大概的意思,明白了

[color=red]報這個錯誤的根本原因就是,在沒有使用web.xml當作Web項目進行初始化的時候,若加載Spring-BlazeDS的配置檔案,就會加載相關的BlazeDS相應的監聽和初始化,進而引發空指針錯誤

[/color]

解決辦法其實有很多

目的就是避免加載Spring-BlazeDS的配置檔案,進而不初始化BlazeDS。

在JUnit中

通過這種方法分開來寫裝載的配置檔案,而取代通配符

再或者,使用通配符的時候,把名字和其他配置檔案排除在外,使之執行不加載相應的配置檔案。

-------------------------

若想使用通配符配置相應檔案,則,可以在web.xml中分開進行注冊

<servlet>
		<servlet-name>Spring flex Dispatcher Servlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:flexContext.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>Spring flex Dispatcher Servlet</servlet-name>
		<url-pattern>/messagebroker/*</url-pattern>
	</servlet-mapping>
           

也可分開配置

<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath*:conf/spring/applicationContext-Dao.xml,
			classpath*:conf/spring/applicationContext-Service.xml,
			classpath*:conf/spring/applicationContext-XXX.xml,
		</param-value>
	</context-param>
           

其他配置檔案可以按相同方式配置,也可以如下

隻要這裡面加載的檔案和servlet配置的檔案不發生沖突,不重複,就不會報錯誤,否則會報錯