2014-03-05 39 views
3

我使用彈簧3.2.XCXF-2.7.5CXF與IncompatibleClassChangeError異常的單位測試失敗

我進口CXF到我Spring的應用程序上下文,像這樣的應用程序:

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

然而,當我跑我結束了以下異常測試:

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122) 
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:154) 
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:100) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:312) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl. 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1037) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:983) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:128) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) 
    at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) 
    ... 28 more 
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl. 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1030) 
    ... 44 more 
Caused by: org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl. 
    at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:173) 
    at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:185) 
    at org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:138) 
    at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:126) 
    at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:138) 
    at org.apache.cxf.bus.spring.SpringBus.<init>(SpringBus.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) 
    ... 46 more 
Caused by: java.lang.IncompatibleClassChangeError: Implementing class 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:169) 
    ... 56 more 

從閱讀What causes java.lang.IncompatibleClassChangeError?它看起來像IncompatibleClassChangeError - 意味着我可能在我的類路徑上有衝突的庫版本。我無法從堆棧跟蹤中瞭解哪個類/庫正在被複制。

我POM看起來就像這樣:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
          http://maven.apache.org/maven-v4_0_0.xsd"> 

    <properties> 
    <wicket.version>1.5.11</wicket.version> 
    <spring.version>3.2.6.RELEASE</spring.version> 
    <project.build.sourceEncoding>windows-1252</project.build.sourceEncoding> 
    <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server> 
    <bootClassPath> 
     ${env.JRE_6_HOME}\lib\rt.jar;${env.JAVA_HOME}\lib\tools.jar;${env.JRE_6_HOME}\lib\jsse.jar; 
    </bootClassPath> 
    <toolsDir>${env.JAVA_HOME}\lib</toolsDir> 
    <jsseDir>${env.JAVA_HOME}\jre\lib</jsseDir> 
    <m2Repository>${env.USERPROFILE}/.m2/repository</m2Repository> 
    </properties> 

    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.2</version> 
     </dependency> 
     <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket</artifactId> 
     <version>${wicket.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-core</artifactId> 
     <version>${wicket.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-extensions</artifactId> 
     <version>${wicket.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-datetime</artifactId> 
     <version>${wicket.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-spring</artifactId> 
     <version>${wicket.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.2.0.RELEASE</version> 
     </dependency> 
     <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>3.2.0.RELEASE</version> 
     </dependency> 
     <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.2</version> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 

    <dependencies> 
    <!-- shared look/functionality --> 
    <dependency> 
     <groupId>us.ak.state.revenue.cssd</groupId> 
     <artifactId>myAlaska</artifactId> 
     <version>1.6.2</version> 
     <exclusions> 
     <exclusion> 
      <groupId>org.apache.wicket</groupId> 
      <artifactId>wicket-datetime</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>us.ak.state.revenue.cssd</groupId> 
     <artifactId>doc</artifactId> 
     <version>1.6.2</version> 
    </dependency> 

    <!-- WICKET DEPENDENCIES --> 
    <dependency> 
     <groupId>org.apache.wicket</groupId> 
     <artifactId>wicket-datetime</artifactId> 
     <version>${wicket.version}</version> 
     <exclusions> 
     <exclusion> 
      <groupId>org.apache.wicket</groupId> 
      <artifactId>wicket-core</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 

    <!-- JUNIT DEPENDENCY FOR TESTING --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.4</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- SPRING Testing --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${spring.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
     <!-- TODO: once unit tests work test if this should be test scoped --> 
    </dependency> 

    <!-- Make Sure CXF starts properly --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>3.2.0.RELEASE</version> 
     <scope>compile</scope> 
    </dependency> 

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

    <!-- Spring Transactional Support --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>1.7.2</version> 
    </dependency> 

    <!-- LDAP Authentication --> 
    <dependency> 
     <groupId>com.novell.ldap</groupId> 
     <artifactId>jldap</artifactId> 
     <version>4.3</version> 
    </dependency> 

    <!-- PDF report Generation --> 
    <dependency> 
     <groupId>com.lowagie</groupId> 
     <artifactId>itext</artifactId> 
     <version>2.0.4</version> 
    </dependency> 

    <!-- email --> 
    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.5.0-b01</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun</groupId> 
     <artifactId>jsse</artifactId> 
     <version>1.6.0_21</version> 
     <scope>system</scope> 
     <systemPath>${env.JRE_6_HOME}\lib\jsse.jar</systemPath> 
    </dependency> 

    <!-- Mainframe/Broker --> 
    <dependency> 
     <groupId>com.softwareAG.entirex</groupId> 
     <artifactId>entirex-runtime</artifactId> 
     <version>9.5.1</version> 
    </dependency> 

     <!-- Unknown/Miscl --> 
    <dependency> 
     <groupId>commons-collections</groupId> 
     <artifactId>commons-collections</artifactId> 
     <version>3.2</version> 
     </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.2.2</version> 
    </dependency> 

    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.0.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
      <encoding>${project.build.sourceEncoding}</encoding> 
     <compilerArguments> 
      <bootclasspath> 
      ${bootClassPath}; 
      </bootclasspath> 
      <endorseddirs> 
      ${m2Repository}/javax/xml/bind/jaxb-api/2.2.6/;${m2Repository}/org/apache/cxf/cxf-rt-frontend-jaxws/2.7.5/;${toolsDir};${jsseDir}; 
      </endorseddirs> 
     </compilerArguments> 
      <compilerArgument> -Xlint:unchecked </compilerArgument> 
      <showDeprecation>true</showDeprecation> 
      <showWarnings>true</showWarnings> 
     <optimize>true</optimize> 
     <debug>true</debug> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>com.atlassian.maven.plugins</groupId> 
     <artifactId>maven-clover2-plugin</artifactId> 
     <version>3.2.2</version> 
     <configuration> 
     <!-- License info removed --> 
     <excludes> 
      <exclude>**/SessionFactoryBean*.java</exclude> 
     </excludes> 
     <cloverDatabase>${project.basedir}/.clover/db</cloverDatabase> 
     </configuration> 
     <executions> 
     <execution> 
      <id>clover</id> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>instrument</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
     <plugin> 
     <!-- moves the test results outside of clover--> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.10</version> 
     <configuration> 
     <reportsDirectory> 
      ${project.build.directory}/surefire-reports 
     </reportsDirectory> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build>  

</project> 

MyAlaska是另一個項目是成功地使用共享庫,
具有以下依存關係:

<!-- another shared jar sits here that pulls in Wicket,Look-feel stuff --> 


<!-- ADFS attempt #2, this time with WS-Federation/SAML support --> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-frontend-jaxws</artifactId> 
    <version>2.7.5</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-transports-http-hc</artifactId> 
    <version>2.7.5</version> 
</dependency> 
<dependency> 
    <groupId>javax.xml.bind</groupId> 
    <artifactId>jaxb-api</artifactId> 
    <version>2.2.6</version> 
</dependency> 
<!--https WS stuff--> 
<dependency> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-rt-rs-security-sso-saml</artifactId> 
    <version>2.7.5</version> 
</dependency> 
<!-- specifically adds SAML/federation to the stack --> 
<dependency> 
    <groupId>org.apache.cxf.fediz</groupId> 
    <artifactId>fediz-core</artifactId> 
    <version>1.1.0</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.cxf.fediz</groupId> 
    <artifactId>fediz-cxf</artifactId> 
    <version>1.1.0</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.cxf.fediz</groupId> 
    <artifactId>fediz-spring</artifactId> 
    <version>1.1.0</version> 
</dependency> 

<!-- Spring Security integration--> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-web</artifactId> 
    <version>3.1.3.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.wicket</groupId> 
    <artifactId>wicket-spring</artifactId> 
</dependency> 

<!-- configuration update "magic" --> 
<dependency> 
    <groupId>commons-configuration</groupId> 
    <artifactId>commons-configuration</artifactId> 
    <version>1.9</version> 
</dependency> 

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.11</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-test</artifactId> 
    <version>3.0.7.RELEASE</version> 
    <scope>test</scope> 
</dependency> 

如果你還在在這裏,感謝閱讀。
我在做什麼錯?
CXF/Spring爲什麼不啓動,我該如何解決?

UPDATE:
運行調試後違規類似乎是: org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl
駐留在CXF-RT-的WS-Policy-2.7.5
至於我可以告訴雖然那是這個罐子的唯一地方,它只包含一次。

JHades更新
當我最初運行報告Log4j和Log4J的,演員是重疊的,所以是 的JavaMail-1.5和Geronimo的javamail_1.4_spec。我已經解決了這些用途。

報告結果:

>>>> Jar overlap report: 


Total number of classes with more than one version: 0 

兩個Jhadesmvn dependency:tree -Ddetail=true inidicate是CXF-RT-的WS-Policy2.7.5就像所有其他的CXF JAR版本。

+0

診斷此問題的可能方法之一是在調試器中運行您的程序,並在IncompatibleClassChangeError異常拋出時設置斷點,然後檢查局部變量以找出哪些類cxf嘗試加載。 –

回答

3

所以我發現我的IDE 搞亂了我的構建。
我認爲,因爲我配置了maven,所以它會在引擎蓋下運行純粹的maven。
在我的IDE中,我配置了一個安裝的目錄,用於Axis2-1.6.0用於我的maven依賴關係之前。 Axis-2是從我的應用程序的舊版本中遺留下來的,並且保留了許多依賴關係的重複,包括Neethi,我已經在其中列出了這個錯誤的潛在來源,其中CXF

+0

使用「行家依賴:樹」,找到它的依賴性使用neethi,然後排除這樣說: \t \t \t \t \t org.apache.axis2 \t \t \t Axis2的內核 \t \t \t 1.3 的javax.servlet servlet的API \t \t \t \t org.apache.neethi neethi \t \t lordyoum

2

似乎正在加載的類org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl的版本無效。

您可以檢查戰爭看是否有使用此命令任何重複的課程(從JHades,一個工具,我做了),在這裏看到的duplicate classes report

java -jar jhades-standalone-report.jar path/to/war/webapp.war 

報告應該給什麼像這樣:

>>>> Jar overlap report: 

poi-3.5-FINAL-20090928.jar overlaps with poi-3.7-20101029.jar - total overlapping classes: 990 
xercesImpl-2.7.0.jar overlaps with xercesImpl-2.9.1.jar - total overlapping classes: 867 
xalan-2.6.0.jar overlaps with xalan-2.7.1.jar - total overlapping classes: 711 
bcel-5.2.jar overlaps with xalan-2.7.1.jar - total overlapping classes: 361 
xml-apis-2.9.1.jar overlaps with xml-apis.jar - total overlapping classes: 301 
jasperreports-applet-3.7.1.jar overlaps with jasperreports-javaflow-3.7.1.jar - total overlapping classes: 254 
jasperreports-3.7.1.jar overlaps with jasperreports-applet-3.7.1.jar - total overlapping classes: 254 
... 

Total number of classes with more than one version: 6169 

而且它是可以查詢的類路徑類的所有版本和當前使用的版本:

System.out.println("All versions of AssertionBuilderRegistryImpl:" + getClass().getClassLoader().getResources("org/apache/cxf/ws/policy/AssertionBuilderRegistryImpl.class")); 

System.out.println("Currently used version of AssertionBuilderRegistryImpl:" + getClass().getClassLoader().getResource("org/apache/cxf/ws/policy/AssertionBuilderRegistryImpl.class")); 

存在一些可能性:存在多個版本,並且只有一個是正確的。在這種情況下,排除maven中版本錯誤的jar。

如果只有一個版本存在,那麼它的錯誤之一,使用mvn dependency:tree -Ddetail=true找出爲什麼它包括在內,並更新POM加載正確的版本。

+1

所謂的「告密」的工具做同樣的事情(從JBoss的) –