问题

问题:Java Development Kit (JDK) 8 中的某些 Java API(但在更高版本的 JDK 中被移除)无法在 ArcObjects SDK for Java Server Object Extension (SOE)/Sever Object Interceptor (SOI) 中加载。

Last Published: August 30, 2021

描述

如果 ArcObjects SDK for Java Server Object Extension (SOE) 或 Server Object Interceptor (SOI) 引用了 JDK 8 中存在但在更高版本的 JDK 中被移除的某些 Java API,例如“java.xml.ws”、“java.corba”或“java.transaction”模块中的类,那么在访问触发引用这些模块中的类的 SOE 或 SOI 代码时可能导致出现错误消息。 服务器日志中出现以下严重级别的消息:

级别时间消息
严重2021 年 7 月 1 日 10:03:03 AM服务“USA.MapServer”的实例处理请求失败。 AutomationException: sun/misc/BASE64EncoderUSA.MapServer
严重2021 年 7 月 1 日 10:03:00 AM服务“USA.MapServer”的实例处理请求失败。 AutomationException: org/omg/CORBA/StringHolderUSA.MapServer
严重2021 年 7 月 1 日 10:02:57 AM服务“USA.MapServer”的实例处理请求失败。 AutomationException: javax/xml/ws/Service$ModeUSA.MapServer

SOE 或 SOI 工程可以构建成功,无编译错误。 仅当 SOE 或 SOI 部署到 ArcGIS Server 10.7 或更高版本时,才会在运行时看到此问题。

原因

自 ArcGIS Server 10.7 起,支持基于 ArcMap 的服务的服务运行时从 Java 8 升级到 Java 11,尽管仍需要使用 JDK 8 构建 ArcObjects Java SOE 和 SOI。 因此,在 ArcGIS Server 10.7 或更高版本中,从 JDK 11 中移除但仍在 ArcObjects SOE 或 SOI 中引用的 Java 类不会由运行在 Java 11 上的服务运行时自动加载,如 ArcGIS Server 的先前版本一样。

要查看在 JDK 11 中移除的 Java 模块列表,请参阅移除 Java EE 和 CORBA 模块

解决方案或解决方法

如果您曾经在 ArcGIS Server 10.7 的先前版本中使用 ArcObjects Java SOE 或 SOI,但是却在 ArcGIS Server 更高版本中遇到类似问题,请首先确认日志消息中报告的 Java 类是否来自已从 JDK 11 中移除的 Java 模块。 确认这一点后,可选择以下两个选项之一继续执行操作:

选项 1:添加从 JDK 11 中移除的 Java 模块的 JAR 文件作为您在 SOE 或 SOI 工程中的依赖项,并导出具有依赖项的 SOE 或 SOI

有关在 SOE 或 SOI 中打包第三方依赖项的分步说明,请参阅如何导出具有依赖项的 Java SOE。 通过这种方式,服务运行时可以从在 SOE 或 SOI 中打包的 JAR 文件加载 Java 类,这应该可以解决此问题。

选项 2:迁移 ArcObjects SOE 或 SOI 以使用 Enterprise SDK 进行编译

由于 Enterprise SDK 支持使用 JDK 11 为基于 ArcGIS Pro 的服务构建 Java SOE 和 SOI,因此您还可以迁移 ArcObjects SOE 或 SOI 以使用 Enterprise SDK 进行构建。 要使用从 JDK 11 中移除的 Java 模块中的类,您必须将这些模块添加为 SOE 或 SOI 工程中的第三方依赖项。 否则,您的 SOE 或 SOI 工程将编译失败,对于那些在 JDK 11 中不存在的类,Java 编译器会提示错误信息,除非添加相关依赖项。 这有助于在编译时而非运行时检测此 Java 类加载问题。
 

文章 ID: 000026040

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项