2014-09-26 47 views
0

在将Java EE 6 API作为提供的范围的依赖项的Maven项目中的测试中尝试使用SOAP时,我发现问题。使用具有Java EE 6依赖性的SOAP的Maven测试问题

重要事实

  1. 我知道,the API is unusable for testing
  2. 我知道我应该导入任何规范的实现,如果我想使用它
  3. SOAP is part of Java SE,不EE
  4. SOAP (模拟)类包括在the Maven artifact,我相信他们不应该
  5. 这发生在Jav一个EE 6,但those classes have been removed in version 7
  6. 如果我删除的依赖,测试做工精细
  7. 当使用7.0版本的API的一切工作

异常

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/xml/messaging/URLEndpoint 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:367) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:102) 
     at somecompany.someproject.service.SomeBean.someMethod(SomeBean.java:##) 
     at somecompany.someproject.service.SomeBeanTest.testSomeMethod(SomeBeanTest.java:##) 

POM配置

<dependencies> 
    ... 
    <dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <scope>provided</scope> 
    </dependency> 
    ... 
</dependencies> 

<build> 
    ... 
    <plugins> 
    ... 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.17</version> 
     ... 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 

未能解决

我尝试了好几种解决方案(没有要发布各一个清晰,但是会被要求张贴):

  1. 我在Maven和没有尝试过每一个<scope/>禁用测试库
  2. 此外,试图排除库作为插件的依赖
  3. 包括rj.jar与比JavaEE的-API一个更高优先级的系统的依赖也没有工作,要么

不需要解决方法

我使用7.0依赖工作的测试,但根据政策,这是不可接受的,所以我需要解决这个问题。

回答

0

我要让它正常工作使用maven-surefire-plugin的财产classpathDependencyExcludes

<build> 
    ... 
    <plugins> 
    ... 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.17</version> 
     ... 
     <configuration> 
     <classpathDependencyExcludes> 
      <classpathDependencyExcludes>javax:javaee-api</classpathDependencyExcludes> 
     </classpathDependencyExcludes> 
     ... 
     </configuration> 
     ... 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 

我要离开这个贴,因为我相信我不会是唯一一个在某些时候遇到了此。

+0

这是好奇我怎么发现我自己的解决方案在10分钟内几个小时的奋力寻求解决方案之后,可能只是因为书面方式下的问题,使我的头把一切都各就各位。 – 2014-09-26 08:34:10

0

我在运行java类时运行的问题如下。 异常: java.lang.ClassFormatError:在方法,是不是在类文件的javax天然的或抽象/ XML /消息/ URLEndpoint

随着Java8作为运行时,终于包括正确版本(7.0)和所述缺席代码属性程序开始工作罚款早些时候正在采取版本6。

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency>