2012-08-10 56 views
0

我想在我的項目中將cxf從版本2.3.1升級到版本2.6.1。CXF 2.6.1在jboss中登錄 - 異常

該項目是一個Web應用程序,它利用CXF作爲Web服務消費者到JBoss 5.1

該項目運行使用SLF4J記錄,但依賴是provided因爲JBoss容器自帶SLF4J。

我在項目中創建以下文件: META-INF/cxf/org.apache.cxf.Logger有一行作爲其內容: org.apache.cxf.common.logging.Slf4jLogger(按cxf指令)

當我運行在JBoss中的項目(單機或月食)我得到以下錯誤:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name '******' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public synchronized java.lang.Object org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create()] threw exception; nested exception is java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:581) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1015) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393) 
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310) 
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142) 
    at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461) 
    at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118) 
    at org.jboss.web.deployers.WebModule.start(WebModule.java:97) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157) 
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96) 
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668) 
    at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206) 

似乎有什麼東西做的記錄,但是當我查找類由JBoss提供的SLF4J的API的,我可以看到,該方法是正確的:

public abstract void log(Marker paramMarker, String paramString1, int paramInt, String paramString2, Throwable paramThrowable); 

此異常使應用程序無法啓動。

我可以確認slf4j正在工作,因爲所有日誌都被正確寫入。

我嘗試在maven中將slf4j設置爲compile,但這會導致其他問題。我不知道如何繼續。有人可以幫忙嗎?

+0

您是否嘗試添加slf4j-api作爲運行時範圍的依賴項? – 2012-08-10 12:14:55

+0

@尼科拉,是的,我有,但是這增加了對web應用程序的lib文件夾的依賴。這會與jboss提供的版本產生依賴衝突。 – tom 2012-08-10 12:21:16

+0

仍然沒有投訴記錄,是嗎?我看到了你對添加slf4j-api和slf4j-log4j12的其他評論。我希望你現在看到有關有兩個日誌上下文的錯誤消息;仍然這或多或少是我工作的方式。 – 2012-08-10 13:31:55

回答

0

你有沒有發現正是這種方法簽名org.slf4j.spi.LocationAwareLogger.log(Lorg/SLF4J /標記,JAVA/LANG /字符串,JAVA/LANG /字符串,JAVA /郎/對象,JAVA /郎/ Throwable;)在你的類路徑中。可能jboss slf4j庫在某種程度上比新鮮cxf預期的要舊。此外,檢查您的類路徑庫中碰撞

+0

classpath中只有一個slf4j庫,它是jboss中客戶機文件夾中的一個。 (這是版本1.5.6)。我在問題中顯示的方法是來自此api的方法。順便說一句,你錯過了我的簽名。這是第三位的整數。 – tom 2012-08-10 12:19:00

+0

好吧,似乎將slf4j-api-1.6.4和slf4j-log4j12-1.6.4添加到項目的lib文件夾中可以解決問題。我不明白爲什麼,因爲jboss提供的版本有正確的簽名。 (可能是類加載器的問題?) – tom 2012-08-10 13:08:40

+0

顯然我已經變得失明。 1.6中的簽名。*不同:public abstract void log(Marker paramMarker,String paramString1,int paramInt,String paramString2,Object [] paramArrayOfObject,Throwable paramThrowable);'所以jboss版本太舊了。謝謝。 – tom 2012-08-10 13:31:54