我這裡的情況其實是在寫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配置的檔案不發生沖突,不重複,就不會報錯誤,否則會報錯