2011-07-14 39 views
9

我正在嘗試使用tomcat 6.0.32,cxf 2.4.1來設置一個簡單的restful web應用程序。任何時候我發出任何呼叫,我都會得到一個異常「沒有名爲'cxf'的bean被定義」,其中cxf是我的總線。沒有定義名爲'cxf'的bean

查看應用程序日誌,我可以看到cxf實例已創建並緩存。

================ APP日誌中的開始======================

910 DEBUG - 創建單豆 'CXF'

910 DEBUG的共享實例 - 創建bean的實例 'CXF'

1018 DEBUG - 急切緩存豆 'CXF' 允許解決潛在的循環引用

1031調試 - 返回尚未完全初始化的單例bean'cxf'的急切緩存實例 - 循環引用的結果倫斯

1034 DEBUG - 返回單豆 'org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor'

1035 DEBUG的緩存實例 - - 豆 'CXF'

1035調試完成創建實例返回單豆 'org.apache.cxf.bus.spring.Jsr250BeanPostProcessor'

1035 DEBUG的緩存實例 - 返回緩存的單bean實例, 'org.apache.cxf.bus.spring.BusExtensionPostProcessor'

1035 DEBUG - 創建單豆「連接」的共享實例

1035 DEBUG - 創建豆「連接」

1035 DEBUG的實例 - 急切緩存豆「連接」,以便解決潛在的循環引用

1052 DEBUG - 創建完豆 '連接' 的情況下

1052 DEBUG - 創建豆單 'connectionService'

1052 DEBUG的共享實例 - 創建我豆 'connectionService'

1053 DEBUG的nstance - 急切緩存豆 'connectionService' 允許解決潛在的循環引用

1053 DEBUG - 返回單豆 '連接'

1053 DEBUG的緩存實例 - 選舉單豆 'CXF' 的緩存實例

1121 DEBUG - 調用init方法 '創造' 上豆名爲 'connectionService'

1356 DEBUG - 成品創造bean'connectionService'的立場

1384 DEBUG fecycleProcessing with name'lifecycleProcessor':using default [org.springframework.context.support。DefaultLifecycleProcessor @ 45d1c3cd]

1385 DEBUG - 返回單豆 'lifecycleProcessor'

1387 DEBUG的緩存實例 - 回到單身豆 'CXF'

1387 DEBUG的緩存實例 - 返回singleton的bean的緩存實例「 CXF」

1388 DEBUG - 調用init方法'與名豆 'connectionService創建'

1391 DEBUG - 豆的完成創建實例「connectionService

1391 DEBUG - 無法找到LifecycleProcessor名爲 'lifecycleProcessor':使用默認的[[email protected]3299f6]

1391 DEBUG - 返回singleton的bean的 'lifecycleProcessor'

緩存實例

1391 DEBUG - 發佈根WebApplicationContext的與名稱[org.springframework.web.context.WebApplicationContext.ROOT]

1391 INFO ServletContext屬性 - 根的WebApplicationContext:初始化在1390毫秒

完成

================ APP LOG END ======================

但是當一個請求進入,它總是失敗,說它找不到這個bean。

===================== Tomcat(localhost)日誌開始==================

信息:初始化春根WebApplicationContext的

2011年7月14日上午08時57分03秒org.apache.catalina.core.ApplicationContext登錄

重度:StandardWrapper.Throwable

org.springframework。 beans.factory.NoSuchBeanDefinitionException:沒有定義名爲'cxf'的bean

at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527) 

at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083) 

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274) 

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 

at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079) 

at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:58) 

at org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:54) 

at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 

at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) 

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129) 

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 

at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864) 

at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) 

at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) 

at java.lang.Thread.run(Thread.java:662) 

===================== Tomcat(localhost)日誌結束==================

我能想到的唯一的事情是bean插入到一個上下文中,並且正在從另一個上下文中檢索,但無法驗證或找到解決方法。任何幫助將不勝感激。

回答

19

從你的錯誤日誌,我假設你使用Spring,如果是的話,你將需要以下幾行添加到您的Spring上下文XML:

<import resource="classpath:META-INF/cxf/cxf.xml"/> 
<import resource="classpath:META-INF/cxf/cxf-extension-xml.xml"/> 
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 

希望這有助於。

+1

只添加 「<進口資源=」 類路徑:META-INF/CXF/cxf.xml 「/>」 是足夠的在我的案件。 –

1

如果有其他人來到這裏,正在使用mulesoft esb。這個系統中也存在這個問題。要解決該問題,請在定義流之前添加以下部分。

<spring:beans> 
    <spring:import resource="classpath:META-INF/cxf/cxf.xml" /> 
    <spring:import resource="classpath:META-INF/cxf/cxf-extension-xml.xml" /> 
    <spring:import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 
    <spring:bean class="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor" /> 
    <spring:bean id="classname" name="classname" class="some.implemented.interface.path" /> 
</spring:beans> 
0

在POM文件添加這些依賴關係:

<dependency> 
   <groupId>org.apache.cxf</groupId> 
   <artifactId>cxf-rt-rs-extension-search</artifactId> 
   <version>2.6.0</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-rs-extension-providers</artifactId> 
    <version>3.0.1</version> 
</dependency> 
2

如果有人需要春天的Java配置爲解決這個問題,有兩種選擇:

可以導入CXF。 xml文件插入到您的Java配置類中:

@ImportResource({ "classpath:META-INF/cxf/cxf.xml" }) 

或者您可以定義bean編程方式在您的Java配置類中使用:

@Bean 
public SpringBus cxf() {   
    return new SpringBus(); 
} 

CXF + Spring Java配置類example

0

請檢查下面這些步驟:

1)在下述線應包含在你的Spring上下文XML:

<import resource="classpath:META-INF/cxf/cxf.xml"/> 
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 

2)web.xml中應配置如下:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:cxf.xml</param-value> 
</context-param> 

3)在下面的依賴關係應你的pom.xml裏面添加:

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxrs</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-security</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-policy</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-rs-service-description</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 

如果這一切沒有幫助您解決您的問題,最後一步就是檢查WebLogic配置,這裏有你必須檢查你的WebLogic Server上的步驟:

  1. 確保您有定義機器到您的服務器。
  2. 你需要指定服務器和機器進行部署如下:

Weblogic app deployment

我希望通過檢查所有這些步驟您的問題得到解決。

乾杯

相關問題