Миграция в Джакарту: ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl - PullRequest
0 голосов
/ 18 апреля 2019

При переходе с Java 8 на Java 11 и переходе с EE на новейшие библиотеки Jakarta в соответствии с https://wiki.eclipse.org/New_Maven_Coordinates и Maven central, мы получаем следующее исключение времени выполнения в нашем (все еще основанном на SOAP) клиентском приложении:

Exception in thread "main" javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
        at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:31)
        at javax.xml.ws.spi.FactoryFinder$1.createException(FactoryFinder.java:28)
        at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:73)
        at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:82)
        at javax.xml.ws.spi.Provider.provider(Provider.java:66)
        at javax.xml.ws.Service.<init>(Service.java:82)
        at [...]
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at javax.xml.ws.spi.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:60)
        at javax.xml.ws.spi.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:93)
        at javax.xml.ws.spi.ServiceLoaderUtil.newInstance(ServiceLoaderUtil.java:71)
        ... 5 more

Решение, описанное в Получение java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl, несмотря на определение зависимостей не работает и не использует Джакарту.

Если я не ошибаюсь, библиотеки Jarkarta не должны содержать пакеты "com.sun.xml." Или ссылки на них, но javax.xml.ws.spi.Provider , очевидно, все еще ссылаются такой класс:

private static final String DEFAULT_JAXWSPROVIDER =
        "com.sun"+".xml.internal.ws.spi.ProviderImpl";

Итак, кто-нибудь знает, есть ли в Джакарте эквивалент отсутствующей библиотеки, содержащей ProviderImpl, или как я мог обойти проблему с Джакартой?

Заранее спасибо!

1 Ответ

3 голосов
/ 26 апреля 2019

Я наконец нашел решение для своей проблемы.Согласно ответу, приведенному в Как использовать WebServices на Java 11?пакет javax.jws не существует эталонная реализация JAX-WS должна быть включена в Java 11:

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-ri</artifactId>
  <version>2.3.2</version>
  <type>pom</type>
</dependency>

К сожалению, компилируя наш проект с этой зависимостью, используя последнююmaven-compile-plugin 3.8.0 вызывает исключение, описанное в https://jira.apache.org/jira/browse/MCOMPILER-355. Это должно быть исправлено в 3.8.1, но версия еще не доступна.

В качестве обходного пути наш проект работал сподсказка, указанная в Получение java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl несмотря на то, что зависимости определены в сочетании с дополнительной зависимостью (а именно resolver это также связано в pom.xml из jaxws-ri ), чтобы избежать последующего java.lang.ClassNotFoundException: com.sun.org.apache.xml.internal.resolver.CatalogManager :

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>rt</artifactId>
    <version>2.3.2</version>
</dependency>

<dependency>
    <groupId>com.sun.org.apache.xml.internal</groupId>
    <artifactId>resolver</artifactId>
    <version>20050927</version>
</dependency>

Может быть, это поможет кому-то столкнуться с той же проблемой.

...