Java 9 弃用了六个包含Java EE API的模块,它们将很快被删除:
javax.activation
包的java.activationjavax.activity
,javax.rmi
,javax.rmi.CORBA
,和org.omg.*
包javax.transaction
包的java.transactionjavax.xml.bind.*
包的java.xml.bindjavax.jws
,javax.jws.soap
,javax.xml.soap
,和所有javax.xml.ws.*
包javax.annotation
包的java.xml.ws.annotation哪些维护的第三方工件提供了这些API?它们提供这些API或它们必须提供的其他功能并不重要 - 重要的是,它们是这些模块/包的直接替代品吗?
为了更容易收集知识,我回答了迄今为止我所知道的并将答案作为社区维基.我希望人们能够扩展它,而不是写出自己的答案.
在您投票结束之前:
为了测试应用程序,我正在创建SOAP消息.这可以直接从Eclipse(Oxygen.1a)运行,但在打包为runnable jar(选项:将所需的包打包到生成的jar中)后,我收到以下错误:
javax.xml.soap.SOAPException: Unable to create SAAJ meta-factoryProvider com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found
at javax.xml.soap.SAAJMetaFactory.getInstance(SAAJMetaFactory.java:94)
at javax.xml.soap.MessageFactory.newInstance(MessageFactory.java:138)
Run Code Online (Sandbox Code Playgroud)
触发:
MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
Run Code Online (Sandbox Code Playgroud)
所以我理解MessageFactory使用sun包
static private final String DEFAULT_META_FACTORY_CLASS =
"com.sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl";
Run Code Online (Sandbox Code Playgroud)
但是我绝对无能为力地知道为什么它在打包到可运行的JAR之后无法找到这个类.任何提示或方向都会大大减少.
我们开发的 Java 应用程序仍然需要 Java 8 才能运行,并且计划支持 Java 11。为此,我们必须找到与已删除的 xml 和 Web 服务相关的类的替代品(请参阅JEP 320)。我们下载了所需的所有 jar,但是当我们尝试连接到 Web 服务时,出现以下错误:
MASM0004: No <tubelines> section found in the default [ jaxws-tubes-default.xml ] configuration file
Run Code Online (Sandbox Code Playgroud)
比较 Java 8 中的 jaxws-tubes-default.xml 文件和我们收集的 jar 文件,我们发现它们的内容几乎相同,除了包名称略有不同。
据我们所知,发生这种情况是因为文件解组器将 xml 内容读取到类的错误属性中com.sun.xml.ws.runtime.config.MetroConfig
。从 xml 读取的对象Tubelines
未设置在tubelines
属性上。相反,它是在any
属性上设置的。
深入调试代码,我们可以看到在 Java 8 上该tubelines
属性与命名空间“http://java.sun.com/xml/ns/metro/config”相关联,但在 Java 11 上则不然。
我们无法进行更深入的挖掘,也无法在网络上找到任何相关信息。
有谁知道可以帮助我们按预期解析文件吗?
编辑: 有人建议我的问题与此重复,但事实并非如此。链接的问题解释了 Java 11 带来的变化。我的问题是关于我在执行这些步骤时发现的问题。我们遇到的问题并未在该问题中得到解决。