2014-09-26 2 views
0

Я нахожу проблемы при попытке использовать SOAP в тестах в проекте maven, который имеет API Java EE 6 в качестве зависимой области с ограниченными возможностями.Maven испытывает проблемы с SOAP с зависимостью Java EE 6

Важные факты

  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 все работает

Exception

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. Я попытался каждый <scope/> в Maven, и никто отключает библиотеку в тестах
  2. Кроме того, пытались исключить библиотеку как зависимость плагина
  3. Включая rj.jar как зависимость системы с более высоким приоритетом, чем JavaEE-апи один не работал ни

Нежелательные обходной

Я получил испытание работы с использованием 7.0 зависимости, но это неприемлемо в соответствии с политикой, так что мне нужно, чтобы это исправить.

ответ

0

я получил, чтобы сделать его работу, используя свойство classpathDependencyExcludes из maven-surefire-plugin:

<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 минут после нескольких часов, борясь за решение, возможно, только потому, что задал вопрос и поставил голову на место. –

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>