2017-03-20 64 views
0

我正在嘗試將一些功能集成到我的軟件中,該軟件需要Apache CXF Bundle(2.7.18)對某些Web服務進行SOAP調用。與Spring Framework和Apache CXF依賴衝突 - '沒有這樣的方法'

我pom.xml文件看起來像:

<dependency> 
    <--This is the new dependency I am integrating into my software--> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-bundle</artifactId> 
    <version>2.7.18</version> 
</dependency> 

//other dependencies 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>4.3.3.RELEASE</version> 
</dependency> 

該項目建立精細與Maven,但是當我嘗試加載.war文件到Wildfly,我收到下面的堆棧跟蹤:

Context initialization failed: java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.<init>(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V 
at org.springframework.context.expression.StandardBeanExpressionResolver.<init>(StandardBeanExpressionResolver.java:98) 
at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:557) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173) 
at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:195) 
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100) 
at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
at org.jboss.threads.JBossThread.run(JBossThread.java:320) 

2017-03-20 14:27:45,076 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 340) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./p6pmtjsonresponse: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./p6pmtjsonresponse: java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.<init>(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.<init>(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V 
    at org.springframework.context.expression.StandardBeanExpressionResolver.<init>(StandardBeanExpressionResolver.java:98) 
    at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:557) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:455) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 
    at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173) 
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:195) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100) 

任何想法可能會導致這種情況?我想知道是否應該排除一些傳遞性依賴或類似的東西?如果可能的話,我願意使用CXF以外的其他框架。

我認爲衝突是由於試圖使用兩個造成衝突的框架。

在此先感謝!

回答

1

我能夠通過升級到CXF 3.1.10和Spring 4.3.3,然後用個人替換CXF-Bundle我需要的依賴關係如:

<dependency> 
    <groupId>org.apache.wss4j</groupId> 
    <artifactId>wss4j</artifactId> 
    <version>2.1.8</version> 
    <type>pom</type> 
</dependency> 

<dependency> 
    <groupId>org.apache.wss4j</groupId> 
    <artifactId>wss4j-ws-security-common</artifactId> 
    <version>2.1.8</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-frontend-jaxws</artifactId> 
    <version>3.1.10</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-transports-http</artifactId> 
    <version>3.1.10</version> 
</dependency> 
<!-- Jetty is needed if you're are not using the CXFServlet --> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-transports-http-jetty</artifactId> 
    <version>3.1.10</version> 
</dependency> 
1

spring-web依賴帶來以下春瓶:

spring-aop-4.3.3.RELEASE.jar 
spring-beans-4.3.3.RELEASE.jar 
spring-context-4.3.3.RELEASE.jar 
spring-core-4.3.3.RELEASE.jar 
spring-expression-4.3.3.RELEASE.jar 
spring-web-4.3.3.RELEASE.jar 

添加cxf-bundle依賴會導致以下春瓶:

spring-aop-4.3.3.RELEASE.jar 
spring-asm-3.0.7.RELEASE.jar   ** 
spring-beans-4.3.3.RELEASE.jar 
spring-context-4.3.3.RELEASE.jar 
spring-core-4.3.3.RELEASE.jar 
spring-expression-3.0.7.RELEASE.jar ** Replaced 4.3.3 
spring-jms-3.0.7.RELEASE.jar   ** 
spring-tx-3.0.7.RELEASE.jar   ** 
spring-web-4.3.3.RELEASE.jar 

正如你所看到的,CXF使用Spring 3.0.7 ,而Spring 3.0與Spring 4.3不兼容。

你可以嘗試顯式地添加依賴來強制所有的Spring jar文件到4.3.3版本,但是我懷疑這會起作用。 Spring 3和Spring 4之間的內部更改過多。

+0

我會嘗試手動添加依賴以及yaswanth所述的解決方案,並將更新此線程。感謝您的反饋。 – Bryce

0

與cxf 2.x.x相比,cxf 3.x.x有許多類名稱和程序包名稱更改。在我們的項目中,spring 4.1.6.RELEASE與cxf 2.7.x一起工作良好

+0

有趣。我會給4.1.6 RELEASE一個去並跟進。感謝您的反饋。 – Bryce