如何在 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 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ConfigurationSection 中包含简单集合
如何在 SwiftUI 中包含和调用 BSImagePicker