如何在 AnyLogic 8.4.0 中包含 JAXB 函数?

Posted

技术标签:

【中文标题】如何在 AnyLogic 8.4.0 中包含 JAXB 函数?【英文标题】:How to include JAXB functions in AnyLogic 8.4.0? 【发布时间】:2019-12-20 11:31:33 【问题描述】:

我有一个使用 JAXB 函数来解析 XML 文件的 AnyLogic 模型。该模型以前可以工作,但现在不能工作,因为显然较新版本的 Java 不包括 JAXB。如何在 Java 程序中执行此操作的在线示例不适合 AnyLogic 环境。

根据在线搜索,我下载了jaxb-api-2.4.0-b180830.0359.jar 文件并将其包含在AnyLogic 模型中。这本身不起作用并导致以下错误:

SEVERE: null javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.

然后我在导入部分添加了以下内容:

 import java.xml.bind;
 import com.sun.xml.bind;

也试过了:

 import java.xml.bind.*;
 import com.sun.xml.bind.*;

两者都导致相同的错误:

The import com.sun.xml.bind cannot be resolved. The import java.xml cannot be resolved.

来自例如https://www.dariawan.com/tutorials/java/using-jaxb-java-11/ 的在线指导建议使用以下代码将依赖项添加到 Java 程序:

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>$jaxb.api.version</version>
    </dependency>

我们如何通过 AnyLogic 接口指定这样的依赖关系?

一旦 JAXB 函数工作,它们应该导致解析 XML 文件中的数据,并像以前一样在 AnyLogic 中创建和填充相应的对象。

【问题讨论】:

【参考方案1】:

听起来您没有在 AnyLogic 中正确添加 .jar 文件...

在项目视图中单击您的模型(所有代理和 Main 上方的最顶部条目):

在属性中,您可以在“依赖项”选项卡下添加 .jar 文件:

请遵循“在模型文件夹中保留一份副本”的建议,以免丢失。

现在您可以导入您需要的内容,它会起作用(除非 .jar 文件本身损坏)。

PS:将您的问题改写为“如何将外部 jar 文件加载到我的模型依赖项”可能会更好

【讨论】:

@Benjamin 感谢您的意见。我们当前的模型成功加载了许多其他 jar 文件,其中一些我按照您建议的相同方法添加了自己。 jaxb-api-2.4.0-b180830.0359.jar 文件确实显示在 Jar 文件列表中。但我得到了我上面问题中的错误。据我了解,导入 JAXB jar 文件还有更多内容。其他 Java 程序员报告了问题,他们甚至没有使用 AnyLogic——请在 *** 和 GitHub 上搜索错误消息以查看这些问题(我达到了字符限制,否则会添加链接)。 嗯,那是那个jar文件的问题吧?【参考方案2】:

问题

正如问题中已经提到的,问题是这样的: 从 Java 9 开始,JAXB 作为一种用于 XML 处理的 Java 工具已从 Java 标准库中删除。做出此决定的原因是为了使标准 Java 库更轻量级。

Java 中的依赖项

这可以通过将已删除的包手动包含到您的项目中来解决。由于很多人已经遇到过这个问题,因此存在相当多的 SO 问题,例如 this 和 this。 在这些答案中,建议“加载依赖项”,例如:

<!-- https://mvnrepository.com/artifact/pacakgename -->
<dependency>
    <groupId>packagename</groupId>
    <artifactId>modulename</artifactId>
    <version>1.0.0</version>
</dependency>

这些依赖语句由 Java IDE(如 Eclipse)解释(使用 Maven 等包管理器),然后自动从在线包存储库加载指定的包并包含在项目中。

在 AnyLogic 中,过程略有不同!

AnyLogic 中的依赖关系

在 AnyLogic 中,当您在 AnyLogic 编辑器中单击项目并在 Dependencies 选项卡下添加 JAR 文件时,会发生完全相同的事情,请参阅 Benjamin 对此的回答。为此,您必须手动在包存储库中找到 JAR 文件并首先下载它。

需要的包

这是我不完全确定的地方。当我包含以下包时,我将运行一个示例,但可能存在冗余,因此您可能想尝试它们的变体:

javax.xml.bind / jaxb-api / 2.3.0-b170201.1204

javax.activation / activation / 1.1

org.glassfish.jaxb / jaxb-runtime / 2.3.0-b170127.1453

com.sun.xml.bind / jaxb-impl / 2.2.11

com.sun.xml.bind / jaxb-core / 2.2.11

示例

我在 AnyLogic 中创建了一个基于 blog post 的简单示例模型。你可以运行并下载它(包括依赖的Java包)here。

【讨论】:

以上是关于如何在 AnyLogic 8.4.0 中包含 JAXB 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GNUMakefile 中包含 libxml2 库

如何在 ConfigurationSection 中包含简单集合

如何在 .tsx 打字稿中包含 .css 文件?

如何在 SwiftUI 中包含和调用 BSImagePicker

如何在 SELECT 部分中包含 BIT 类型列而不在 T-SQL 中的 GROUP BY 中包含它?

如何在 AppDelegate 中包含 NSPersistentContainer