使用 BIMserver Java 客户端检索 class 的所有实例时出现空指针异常
Null pointer exception while retrieving all instances of a class with the BIMserver Java client
我是 BIMserver 的新手,我正在尝试使用 Java 客户端库和 IfcModelInterface 获取我签入的特定 class IFC 的实例。
这是一段代码:
IfcModelInterface model = client.getModel(project, project.getLastRevisionId(),false, true,true);
Collection<IfcProduct> products = model.getAllWithSubTypes(IfcProduct.class);
调用getAllWithSubtypes
导致空指针异常。
当我调试时,它会转到 class where :
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));
}
然后我们在 (ClientIfcModel.java:582)
中调用 eClass.getName()
时来到 NullPointer
public <T extends IdEObject> List<T> getAllWithSubTypes(EClass eClass) {
if (!loadedClasses.contains(eClass.getName()) && modelState != ModelState.FULLY_LOADED) {
...
}
您传入一个普通的 Java Class interfaceClass
,它被映射到一个 EMF EClass
以检索它的所有实例。这个映射是在packageMetaData.getEClass(interfaceClass)
中进行的。仅当您传入的 Class interfaceClass
属于与模型的 packageMetaData
.
相同的 IFC 架构版本时,它才有效
例如,假设您请求的接口类是 org.bimserver.models.ifc4.IfcProduct
而您的 model.getPackageMetaData().getSchema()
是 Schema.IFC2X3TC1
,那么映射将是 return 和 EClass null
而您随后将看到 NullPointer。
要防止 NullPointer 异常,您必须对模型的架构进行运行时检查,并且仅在架构符合您的预期时才请求实例。
我是 BIMserver 的新手,我正在尝试使用 Java 客户端库和 IfcModelInterface 获取我签入的特定 class IFC 的实例。
这是一段代码:
IfcModelInterface model = client.getModel(project, project.getLastRevisionId(),false, true,true);
Collection<IfcProduct> products = model.getAllWithSubTypes(IfcProduct.class);
调用getAllWithSubtypes
导致空指针异常。
当我调试时,它会转到 class where :
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));
}
然后我们在 (ClientIfcModel.java:582)
中调用eClass.getName()
时来到 NullPointer
public <T extends IdEObject> List<T> getAllWithSubTypes(EClass eClass) {
if (!loadedClasses.contains(eClass.getName()) && modelState != ModelState.FULLY_LOADED) {
...
}
您传入一个普通的 Java Class interfaceClass
,它被映射到一个 EMF EClass
以检索它的所有实例。这个映射是在packageMetaData.getEClass(interfaceClass)
中进行的。仅当您传入的 Class interfaceClass
属于与模型的 packageMetaData
.
例如,假设您请求的接口类是 org.bimserver.models.ifc4.IfcProduct
而您的 model.getPackageMetaData().getSchema()
是 Schema.IFC2X3TC1
,那么映射将是 return 和 EClass null
而您随后将看到 NullPointer。
要防止 NullPointer 异常,您必须对模型的架构进行运行时检查,并且仅在架构符合您的预期时才请求实例。