readObject() を使用してファイルからコレクションを読み取った後にコレクションを追加すると、例外が発生します。
java.lang.NullPointerException
at java.lang.Class.isAssignableFrom(Native Method)
at org.drools.base.ClassObjectType.isAssignableFrom(ClassObjectType.java:180)
at org.drools.reteoo.builder.PatternBuilder.attachPattern(PatternBuilder.java:95)
at org.drools.reteoo.builder.PatternBuilder.build(PatternBuilder.java:80)
at org.drools.reteoo.builder.GroupElementBuilder$AndBuilder.build(GroupElementBuilder.java:112)
at org.drools.reteoo.builder.GroupElementBuilder.build(GroupElementBuilder.java:70)
at org.drools.reteoo.builder.ReteooRuleBuilder.addSubRule(ReteooRuleBuilder.java:161)
at org.drools.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:134)
at org.drools.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:113)
at org.drools.reteoo.ReteooRuleBase.addRule(ReteooRuleBase.java:445)
at org.drools.common.AbstractRuleBase.addRule(AbstractRuleBase.java:952)
at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:629)
at org.drools.reteoo.ReteooRuleBase.addPackages(ReteooRuleBase.java:472)
at org.drools.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:149)
at DroolsEmpresa.readKnowledgeBaseFromMemoryFile(DroolsEmpresa.java:304)
at ServidorMR.cargaInfoConocimiento(ServidorMR.java:483)
at Tester.main(Tester.java:127)
オブジェクトをシリアライズするコードは
ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream( fileName ) );
out.writeObject( kbuilder.getKnowledgePackages());
out.close();
そして、逆シリアル化のコードは
ObjectInputStream in = new ObjectInputStream( new FileInputStream( fileName) );
Collection<KnowledgePackage> kpkgs = (Collection<KnowledgePackage>)in.readObject();
in.close();
kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kpkgs );
このエラーはルールによるのではないかと思っていましたが、kbase.addKnowledgePackages()
drl ファイルからルールを読み込んで実行すると、例外は発生しません。
私の環境はEclipse 3.7、Java 7.0.21 y drools 5.5.0です。
よろしくお願いします。
更新 1
java 7.0.05 および 7.0.07 でテストを実行: エラーが持続する