使用BIMserver Java客户端检索类的所有实例时,出现空指针异常

时间:2018-09-09 16:36:46

标签: java nullpointerexception bim

我对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为null,因此出现异常,我不明白为什么?

1 个答案:

答案 0 :(得分:0)

查看您的堆栈跟踪,我假设这行是Connecting.java:48

psql -h <dbhost> -U <username> -W -d <dbname> < filename.sql

这将调用以下方法(IfcModel.java:310

Collection<IfcProduct> products = model.getAllWithSubTypes(IfcProduct.class);

然后,当{ClientIfcModel.java:582)中调用public <T extends IdEObject> List<T> getAllWithSubTypes(Class<T> interfaceClass) { return getAllWithSubTypes(packageMetaData.getEClass(interfaceClass)); } 时,我们进入NullPointer

eClass.getName()

您传入一个普通的Java public <T extends IdEObject> List<T> getAllWithSubTypes(EClass eClass) { if (!loadedClasses.contains(eClass.getName()) && modelState != ModelState.FULLY_LOADED) { ... } ,它被映射到EMF Class interfaceClass中以检索其所有实例。此映射在EClass中进行。仅当您传递的packageMetaData.getEClass(interfaceClass)与模型的Class interfaceClass属于相同的IFC架构版本时才有效。

例如,假设您请求的interfaceClass为packageMetaData,而您的org.bimserver.models.ifc4.IfcProductmodel.getPackageMetaData().getSchema(),则映射将返回Schema.IFC2X3TC1,随后您将看到NullPointer。

为防止NullPointer异常,您将必须对模型的架构进行运行时检查,并且仅在架构符合您的期望时才请求实例。