В Java 9 удалены шесть модулей, содержащих API Java EE, и они будут удалены в ближайшее время:

.
  • java.activation с пакетом javax.activation
  • java.corba с пакетами javax.activity, javax.rmi, javax.rmi.CORBA, и org.omg.*
  • java.transaction с пакетом javax.transaction
  • java.xml.bind со всеми пакетами javax.xml.bind.*
  • java.xml.ws с javax.jws, javax.jws.soap, javax.xml.soap, и всеми javax.xml.ws.* пакетами
  • java.xml.ws.annotation с пакетом javax.annotation

Какие поддерживаемые сторонние артефакты предоставляют эти API? Неважно, насколько хорошо они предоставляют эти API или какие другие возможности они могут предложить - важно лишь то, являются ли они полноценной заменой этих модулей/пакетов?

Чтобы облегчить сбор знаний, я ответил на вопрос, что мне известно на данный момент, и сделал ответ вики-сообществом. Надеюсь, люди будут расширять его вместо того, чтобы писать свои собственные ответы.


Перед тем, как проголосовать за закрытие:

  • Да, уже есть некоторые вопросы по отдельным модулям, и ответ на этот вопрос, конечно, дублировал бы эту информацию. Но AFAIK нет единого места, где можно узнать обо всех этих модулях, что, как мне кажется, имеет большую ценность.
  • Вопросы, в которых спрашивают о рекомендациях по библиотекам, обычно считаются не по теме.
  • Вопросы с просьбой порекомендовать библиотеки обычно считаются офф-топиком, потому что "они обычно привлекают ответы, основанные на мнениях, и спам", но я не думаю, что здесь это применимо. Набор допустимых библиотек четко очерчен: Они должны реализовывать определенный стандарт. Кроме этого, ничто другое не имеет значения, поэтому я не вижу особого риска для мнений и спама.

Ответы (10)

Вместо использования устаревших модулей Java EE используйте следующие артефакты.

JAF (java.activation)

JavaBeans Activation Framework (теперь Jakarta Activation) - это отдельная технология (доступная на Maven Central):

.

    com.sun.activation
    jakarta.activation
    <версия>1.2.2

(Источник)

CORBA (java.corba)

Из JEP 320:

Не будет отдельной версии CORBA, если третьи стороны не возьмут на себя обслуживание API CORBA, реализации ORB, провайдера CosNaming и т.д. Поддержка третьими лицами возможна, потому что платформа Java SE поддерживает независимые реализации CORBA. В отличие от этого, API для RMI-IIOP определен и реализован исключительно в рамках Java SE. Отдельной версии RMI-IIOP не будет, если только не будет запущен специальный JSR для его поддержки, или управление API не перейдет к Eclipse Foundation (переход управления Java EE от JCP к Eclipse Foundation включает GlassFish и его реализацию CORBA и RMI-IIOP)

.

JTA (java.transaction)

Отдельная версия:


    jakarta.transaction
    jakarta.transaction-api
    1.3.3

(Источник)

JAXB (java.xml.bind)

Поскольку Java EE была ребрендирована в Jakarta EE, JAXB теперь обеспечивается новыми артефактами:


<зависимость>
    jakarta.xml.bind
    jakarta.xml.bind-api
    2.3.3



<зависимость>
    com.sun.xml.bind
    jaxb-impl
    2.3.3
    runtime



<зависимость>
    org.glassfish.jaxb
    jaxb-runtime
    2.3.3
    runtime

Страница эталонной реализации JAXB.

Альтернативное время выполнения было предложено Абхиджитом Саркаром.

schemagen и xjc можно загрузить оттуда же как часть отдельного дистрибутива JAXB.

См. также ссылка на ответ.

JAX-WS (java.xml.ws)

Реализация ссылок:


<зависимость>
    jakarta.xml.ws
    jakarta.xml.ws-api
    2.3.3



<зависимость>
    com.sun.xml.ws
    jaxws-rt
    <версия>2.3.3

Стандартный дистрибутив скачать (содержит wsgen и wsimport).

Общие аннотации (java.xml.ws.annotation)

Java Commons Annotations (доступны на Maven Central):


    jakarta.annotation
    jakarta.annotation-api
    1.3.5

(Источник)

Я обнаружил, что самый простой способ обойти JAXB-части этих проблем - использовать управление зависимостями в моем корневом pom или в моем bom:

    
      
        
          
          
          
          com.sun.xml.bind
          jaxb-ri
          2.4.0-b180830.0438
          import
          pom
        
        
      
    
    

И в модулях, которые не компилируются на jdk11:

    
    
      
      
         javax.xml.bind
         jaxb-api
      
      
         com.sun.xml.bind
         jaxb-impl
         runtime
      
      
         org.glassfish.jaxb
         jaxb-runtime
         runtime
      
      
      
    

Также, обновление версии org.jvnet.jaxb2.maven2:maven-jaxb2-plugin до 0.14.0 решило все проблемы с генерацией jaxb.

.

Если у вас такая же проблема, добавьте в pom.xml следующую зависимость com.sun.xml.ws jaxws-rt 2.3.3

Тогда используйте JAVA 8 в качестве альтернативной JRE. Для получения более подробной информации смотрите https://www.youtube.com/watch?v=pgSJda16N54 видео, и это сработало для меня.

Я экспериментировал с большинством предложений, описанных выше, используя JDK 11.0.3, и не добился успеха. Единственное решение, которое я в итоге нашел, это следующее. Возможно, есть и другие варианты, которые также работают, но, похоже, что выбор версии является критическим. Например, изменение версии com.sun.xml.ws:rt на 2.3.2 приводит к тому, что модуль javax.jws больше не доступен.

    
        org.glassfish.jaxb
        jaxb-runtime
        2.4.0-b180830.0438
    
    
        com.sun.xml.ws
        rt
        2.3.1
     

Похоже, что jaxws-ri транзитивно зависит от commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852, который, очевидно, можно найти из репозитория http://download.eclipse.org/rt/eclipselink/maven.repo

.

Мне нужно было заменить JAX-WS (java.xml.ws) и JAXB (java.xml.bind) для моего приложения на базе Spring Boot 2, и в итоге я получил следующие JAR (сборка Gradle):

// replacements for deprecated JDK module java.xml.ws
runtimeOnly 'javax.xml.ws:jaxws-api:2.3.0' // javax.xml.ws.* classes
runtimeOnly 'javax.jws:jsr181-api:1.0-MR1' // for javax.jws.* classes

// replacement for deprecated JDK module java.xml.bind
runtimeOnly 'javax.xml.bind:jaxb-api'
runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:2.3.0.1'
runtimeOnly 'org.glassfish:javax.json:1.1.2'
runtimeOnly 'org.eclipse:yasson:1.0.1'

(Вам может понадобиться compile или другая область видимости, нам было достаточно runtimeOnly)

.

Я заметил, что https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core описан как "Старый", а при использовании этого ответа был найден материал на основе org.glassfish, который также привнес org.eclipse.yasson.

Сейчас ситуация действительно запутанная, это работает, но как кто-то может быть уверен, что это лучшая замена, верно?

Я использую jdk 11 + ant + ivy в своем проекте spring mvc. Я получал ошибку "package javax.jws does not exist", поэтому я добавил javax.jws-api-1.1.jar в classpath и все заработало! Просто скачайте jar с https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar. И добавьте его в classpath в вашем build.xml

Альтернативно добавьте это в ваш pom.xml:


  javax.jws
  javax.jws-api
  1.1

Если у вас возникла такая проблема в Talend (например, 7.x), вы можете добавить в POM.xml проекта по умолчанию:


    
        javax.xml.soap
        javax.xml.soap-api
        1.4.0
    

Протестировано с :

  • AdoptJDK 8.0.275.1-hotspot : OK
  • AdoptJDK 11.0.9.101-hotspot : OK
  • AdoptJDK 15.0.1.9-hotspot : KO (но есть другая проблема: Несовместимые типы условных операндов Exception и TDieException)
  • Zulu-8.50.0.1017: OK
  • Zulu-11.43.1015 : OK

JAXB (java.xml.bind) для JDK9

.

Прекрасно работает в моих настольных приложениях на jdk9/10 EA


    2.3.0



<зависимость>
    javax.xml.bind
    jaxb-api
    ${jaxb-api.version}

<зависимость>
    org.glassfish.jaxb
    jaxb-runtime
    ${jaxb-api.version}


<зависимость>
    javax.activation
    javax.activation-api
    1.2.0

Просто небольшая вариация (улучшение) на вышеприведенные ответы --- пример здесь только для JAXB. Можно добавить зависимости в область видимости runtime и только если это действительно необходимо (например, при сборке для запуска в JRE с версией >= 9 --- здесь приводится пример v11):


        when-on-jdk-11
        
            11
        

        
            
            2.3.1
            2.3.2 
        

        
            
            
                javax.xml.bind
                jaxb-api
                ${jaxb-api.version}
                runtime
            
            
                org.glassfish.jaxb
                jaxb-runtime
                ${jaxb-impl.version}
                runtime
            
        
    

2022 WebDevInsider