java - 使用 BIMserver Java 客户端检索类的所有实例时出现空指针异常
问题描述
我对 BIMserver 非常陌生,我正在尝试使用 Java 客户端库和 IfcModelInterface 获取我签入的 IFC 的特定类的实例。
这是一段代码:
IfcModelInterface model = client.getModel(project, project.getLastRevisionId(),false, true,true);
Collection<IfcProduct> products = model.getAllWithSubTypes(IfcProduct.class);
调用getAllWithSubtypes
导致空指针异常。当我调试时,它会转到以下类:
public <T extends IdEObject> List<T> getAllWithSubTypes(EClass eClass) {
if (!loadedClasses.contains(eClass.getName()) && modelState != ModelState.FULLY_LOADED) {
eClass 为空,因此我得到一个异常,我不明白为什么?
解决方案
查看您的堆栈跟踪,我假设这一行是 Connecting.java:48
Collection<IfcProduct> products = model.getAllWithSubTypes(IfcProduct.class);
这将调用以下方法 ( IfcModel.java:310 )
public <T extends IdEObject> List<T> getAllWithSubTypes(Class<T> interfaceClass) {
return getAllWithSubTypes(packageMetaData.getEClass(interfaceClass));
}
然后我们在调用时来到 NullPointer eClass.getName()
( ClientIfcModel.java:582 )
public <T extends IdEObject> List<T> getAllWithSubTypes(EClass eClass) {
if (!loadedClasses.contains(eClass.getName()) && modelState != ModelState.FULLY_LOADED) {
...
}
Class interfaceClass
您传入一个映射到 EMF的普通 Java ,EClass
以便检索其所有实例。此映射在packageMetaData.getEClass(interfaceClass)
. 仅当Class interfaceClass
您传入的 与模型的packageMetaData
.
例如,假设您请求的 interfaceClass isorg.bimserver.models.ifc4.IfcProduct
和您的model.getPackageMetaData().getSchema()
is Schema.IFC2X3TC1
,那么映射将返回 anEClass null
并且您随后将看到 NullPointer。
为了防止 NullPointer 异常,您必须对模型的架构进行运行时检查,并且仅在架构符合您的预期时才请求实例。
推荐阅读
- node.js - 更新帖子后如何更新用户提要?
- dart - 添加/覆盖项目到地图并返回地图
- excel - 打开 Powerpoint 演示文稿并更新 VBA 中的 Excel 链接
- regex - 表单的正则表达式模式匹配验证在 ant.design 中不起作用
- python - 将 2 列向量添加到 ndarray
- git - 在 Github 上上传文件 > 25 MB
- python - 如何以字典的形式向我的烧瓶主服务器发送 POST 请求
- java - 绘制形状时鼠标输入的JavaFX问题?
- linqpad - LINQPad 演示数据库位置 (DemoDB.sdf)
- html - HTML 下拉列表仅显示标签