[rules-users] Inserting facts using declared types from XML
Bharadwaj N
bharadwaj2012 at gmail.com
Wed May 30 01:43:40 EDT 2012
XStream is a simple library to serialize objects to XML and back again.
Sometimes it can get tedious to call all those XStream aliases/register
converter methods or you might simply like the new trend on configuring
POJOs: Java annotations.
While using annotations if you ever got this exception the there might be a
change that you forgot to call process annotation
XStream stream = new XStream(new DomDriver());
stream.processAnnotations(YourClassName.class);
Calling stream.processAnnotations(YourClassName.class); will clear down
this exception.
On Tue, May 29, 2012 at 11:40 PM, Francois Rouaix <francois.rouaix at gmail.com
> wrote:
> Folks,
> I'm trying to use Drools in a mostly Java-less environment (rules are
> written in .drl files, facts will be inserted from XML files). I'm running
> into an issue where the XStream unmarshaller is unable to convert my XML to
> a BatchExecutionCommand because it cannot find the class for a type
> declared in the .drl file.
> Is there any configuration required to make sure the XStream marshaller
> knows about the dynamically generated classes from the .drl?
> I'd appreciated any clues. I cannot add POJO classes for my types due to
> the nature of the app.
> Thanks.
>
>
> DRL file
> -----------
> package com.example
> declare Answers
> ....
> end
> /* some rules after this */
> ...
>
> XML file
> -----------
> <batch-execution>
> <insert>
> <com.example.Answers>
> ....
>
>
> Runner code
> public static void Run(String xmlFactsFile, String drlFilename)
> {
> // Compile the drl file
> KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
> kbuilder.add( ResourceFactory.newFileResource(drlFilename),
> ResourceType.DRL );
> if ( kbuilder.hasErrors() ) {
> System.err.println( kbuilder.getErrors().toString() );
> throw new RuntimeException("Cannot compile \"" + drlFilename + "\"");
> }
> // kbase setup from the compiled rules
> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
> kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
> StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
> File facts = new File(xmlFactsFile);
> BatchExecutionCommand command = (BatchExecutionCommand)
> BatchExecutionHelper.newXStreamMarshaller().fromXML(facts);
> ExecutionResults bresults = ksession.execute(command);
>
> System.out.println(BatchExecutionHelper.newXStreamMarshaller().toXML(bresults));
> }
> }
>
> Error at runtime
> ----------------------
> Exception in thread "main"
> com.thoughtworks.xstream.converters.ConversionException:
> com.example.Answers : com.example.Answers
> ---- Debugging information ----
> message : com.example.Answers
> cause-exception :
> com.thoughtworks.xstream.mapper.CannotResolveClassException
> cause-message : com.example.Answers
> class : org.drools.command.runtime.rule.InsertObjectCommand
> required-type : org.drools.command.runtime.rule.InsertObjectCommand
> converter-type :
> org.drools.runtime.help.impl.XStreamXML$InsertConverter
> path : /batch-execution/insert/com.example.Answers
> line number : 3
> class[1] : org.drools.command.runtime.BatchExecutionCommandImpl
> converter-type[1] :
> com.thoughtworks.xstream.converters.reflection.ReflectionConverter
> version : null
> -------------------------------
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
> at
> com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
> at
> com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:318)
> at
> com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:230)
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> at
> com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
> at
> com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
> at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1035)
> at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1019)
> at com.thoughtworks.xstream.XStream.fromXML(XStream.java:930)
> at
> com.intentsoft.RulesEngine.RulesExecution.Run(RulesExecution.java:34)
> at com.intentsoft.RulesEngine.Main.main(Main.java:10)
> Caused by: com.thoughtworks.xstream.mapper.CannotResolveClassException:
> com.example.Answers
> at
> com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30)
> at
> com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:45)
> at
> com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29)
> at
> com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:70)
> at
> org.drools.runtime.help.impl.XStreamXML$InsertConverter.unmarshal(XStreamXML.java:135)
> at
> com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
> ... 16 more
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20120530/52c5dbcb/attachment.html
More information about the rules-users
mailing list