Я нахожу проблемы при попытке использовать SOAP в тестах в проекте maven, который имеет API Java EE 6 в качестве зависимой области с ограниченными возможностями.Maven испытывает проблемы с SOAP с зависимостью Java EE 6
Важные факты
- Я знаю, что the API is unusable for testing
- Я знаю, что я должен импортировать реализацию любой спецификации, если я хочу, чтобы использовать его
- SOAP is part of Java SE, не EE
- SOAP (макет) включены в the Maven artifact, и я считаю, что они не должны
- Это происходит в Jav EE 6, но those classes have been removed in version 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>
Неудачные решения
Я попробовал несколько решений (не буду размещать каждый из них для ясности, но будет размещать их по запросу):
- Я попытался каждый
<scope/>
в Maven, и никто отключает библиотеку в тестах - Кроме того, пытались исключить библиотеку как зависимость плагина
- Включая rj.jar как зависимость системы с более высоким приоритетом, чем JavaEE-апи один не работал ни
Нежелательные обходной
Я получил испытание работы с использованием 7.0 зависимости, но это неприемлемо в соответствии с политикой, так что мне нужно, чтобы это исправить.
Любопытно, как я нашел свое собственное решение через 10 минут после нескольких часов, борясь за решение, возможно, только потому, что задал вопрос и поставил голову на место. –