[rules-dev] Fwd: [rules-users] DRL to XML transformation

Mark Proctor mproctor at codehaus.org
Thu May 31 08:08:08 EDT 2012


The XML in guvnor is an xstream dump. The class model is not descr 
based, there were decisions at the time to chose a simpler, flatter model.

As we've found though people do just want full drl capabilities, in the 
builder.

The xml parser in drools is descr dump, but only supports features up to 
drools 4.x. I'm not quire sure where the xsd has done.

Mark
On 31/05/2012 10:34, Michael Anstis wrote:
> Edson, Mark,
>
> AFAIK XmlDumpers's XML is not the same as the internal representation 
> used by Guvnor (that is really only an XStream representation of 
> Guvnor's internal model).
>
> I had a look at XmlDumper and it references a schema (that I could not 
> find), but it definitely follows a different mechanism to Guvnor.
>
> Am I correct? The user below would need to write an XSLT to transform 
> between the two.
>
> Or is the expectation that XML from XmlDumper should be able to be 
> loaded into Guvnor?
>
> Thanks,
>
> Mike
>
> ---------- Forwarded message ----------
> From: *Anirban Bandyopadhyay* <Anirban.Bandyopadhyay at monitisegroup.com 
> <mailto:Anirban.Bandyopadhyay at monitisegroup.com>>
> Date: 29 May 2012 13:36
> Subject: [rules-users] DRL to XML transformation
> To: "rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>" 
> <rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>>
>
>
> Hi,
>
> We have a set of rule files in DRL format.  We couldn't find a way 
> (tool) of importing them into Guvnor as BRL file so that we can edit 
> using the designer.
>
> We ended up using the DrlParser and XmlDumper to transform them from 
> DRL to BRL.  It produces the XML and when we add it to the repository 
> using WebDav, Guvnor lists the files under Business Rule which is 
> perfect.  BUT when I try to open it, it throws the following error:
>
> com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$Unkno
>
> wnFieldException: No such field 
> org.drools.ide.common.client.modeldriven.brl.Rul
>
> eModel.rule-attribute
>
> ---- Debugging information ----
>
> field               : rule-attribute
>
> class               : 
> org.drools.ide.common.client.modeldriven.brl.RuleModel
>
> required-type       : 
> org.drools.ide.common.client.modeldriven.brl.RuleModel
>
> converter-type      : 
> com.thoughtworks.xstream.converters.reflection.ReflectionC
>
> onverter
>
> path                : /rule/rule-attribute
>
> version             : null
>
> -------------------------------
>
>         at 
> com.thoughtworks.xstream.converters.reflection.AbstractReflectionConv
>
> erter.determineType(AbstractReflectionConverter.java:449)
>
>         at 
> com.thoughtworks.xstream.converters.reflection.AbstractReflectionConv
>
> erter.doUnmarshal(AbstractReflectionConverter.java:290)
>
>         at 
> com.thoughtworks.xstream.converters.reflection.AbstractReflectionConv
>
> erter.unmarshal(AbstractReflectionConverter.java:230)
>
>         at 
> com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshall
>
> er.java:72)
>
>         at 
> com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(A
>
> bstractReferenceUnmarshaller.java:65)
>
>         at 
> com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnm
>
> arshaller.java:66)
>
>         at 
> com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnm
>
> arshaller.java:50)
>
>         at 
> com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller
>
> .java:134)
>
>         at 
> com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarsh
>
> al(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:895)
>
>         at com.thoughtworks.xstream.XStream.fromXML(XStream.java:886)
>
>         at 
> org.drools.ide.common.server.util.BRXMLPersistence.unmarshal(BRXMLPer
>
> sistence.java:191)
>
>         at 
> org.drools.guvnor.server.contenthandler.drools.BRLContentHandler.retr
>
> ieveAssetContent(BRLContentHandler.java:41)
>
>         at 
> org.drools.guvnor.server.RepositoryAssetService.handlePackageItem(Rep
>
> ositoryAssetService.java:132)
>
>         at 
> org.drools.guvnor.server.RepositoryAssetService.loadRuleAsset(Reposit
>
> oryAssetService.java:118)
>
>         at 
> org.drools.guvnor.server.RepositoryAssetService$Proxy$_$$_WeldClientP
>
> roxy.loadRuleAsset(RepositoryAssetService$Proxy$_$$_WeldClientProxy.java)
>
>         at 
> org.drools.guvnor.server.RepositoryServiceServlet.loadRuleAsset(Repos
>
> itoryServiceServlet.java:403)
>
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
>
> java:39)
>
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
>
> sorImpl.java:25)
>
>         at java.lang.reflect.Method.invoke(Method.java:597)
>
>         at 
> com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:5
>
> 69)
>
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(Remot
>
> eServiceServlet.java:208)
>
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(Remot
>
> eServiceServlet.java:248)
>
>         at 
> com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(Ab
>
> stractRemoteServiceServlet.java:62)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
>
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
>
>         at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
>
> icationFilterChain.java:290)
>
>         at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
>
> ilterChain.java:206)
>
>         at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
>
> alve.java:233)
>
>         at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
>
> alve.java:191)
>
>         at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
>
> ava:127)
>
>         at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
>
> ava:102)
>
>         at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
>
> ve.java:109)
>
>         at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
>
> a:293)
>
>         at 
> org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcesso
>
> r.java:877)
>
>         at 
> org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.pr
>
> ocess(Http11AprProtocol.java:594)
>
>         at 
> org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:16
>
> 75)
>
>         at java.lang.Thread.run(Thread.java:662)
>
> I am able to re-produce the same error when I try to convert the BRL 
> to DRL using BRDRLPersistence and BRXMLPersistence marshalling and 
> unmarshalling.  I checked that the field 'rule-attribute' is indeed 
> not present in org.drools.brms.client.modeldriven.brl.RuleModel.  when 
> I look at the example brl file from the sample mortgage, they don't 
> have 'rule-attribute', and it's not only that specific node, the whole 
> set of node names are different.
>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>
>
> public void convertDrlToBrl() throws IOException, DroolsParserException {
>
>         Resource fileResource = new 
> ClassPathResource("Beneficiary_User_KYC_Level_3_Daily_Limit.drl");
>
>         DrlParser parser = new DrlParser();
>
>         XmlDumper dumper = new XmlDumper();
>
>         Reader source = new InputStreamReader(new 
> FileInputStream(fileResource.getFile()));
>
>         PackageDescr pkg = parser.parse(source);
>
>         String xmlString = dumper.dump(pkg);
>
>         System.out.println(xmlString);
>
>     }
>
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>
>     public void convertBrlToDrl() throws IOException {
>
>         Resource fileResource = new 
> ClassPathResource("Beneficiary_User_KYC_Level_3_Daily_Limit_BRL.brl");
>
>         String fileAsString = 
> FileUtils.readFileToString(fileResource.getFile());
>
>         BRDRLPersistence write = (BRDRLPersistence) 
> BRDRLPersistence.getInstance();
>
>         BRXMLPersistence read = (BRXMLPersistence) 
> BRXMLPersistence.getInstance();
>
>         RuleModel ruleModel = read.unmarshal(fileAsString);
>
>         String outputDRL = write.marshal(ruleModel);
>
>         System.out.println(outputDRL);
>
>     }
>
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>
> Generated xml file:
>
> ===============================================
>
> <rule name="Beneficiary_User_KYC_Level_3_Daily_Limit_BRL">
>
> <rule-attribute name="dialect" value="mvel" />
>
> <lhs><pattern object-type="UserBean" >
>
> <field-constraint field-name="kycLevel">
>
> <literal-restriction evaluator="==" value="KYC_LEVEL_3" />
>
> </field-constraint>
>
> <field-constraint field-name="userType">
>
> <literal-restriction evaluator="==" value="BENEFICIARY" />
>
> </field-constraint>
>
> </pattern>
>
> <pattern object-type="Activity" >
>
> <field-constraint field-name="type">
>
> <literal-restriction evaluator="!=" value="TRANSACTION.SEND" />
>
> </field-constraint>
>
> </pattern>
>
> </lhs><rhs>                       Limit fact0 = new Limit();
>
>                                 fact0.setType( 
> "DAILY_TRANSACTION_LIMIT" );
>
>                                 fact0.setValue( 10000 );
>
>                                 fact0.setErrorMessage( "Maximum daily 
> total amount of N10,000 exceeded for {0}." );
>
>                                 insert(fact0 );
>
> </rhs>
>
> </rule>
>
> ================================================
>
> Am I doing something wrong?  Is there a better way of converting the 
> DRLs to BRLs?
>
> Thanks in advance!
>
> *Anirban Bandyopadhyay*
>
>
> ------------------------------------------------------------------------
> This message contains confidential and proprietary information of the 
> sender, and is intended only for the person(s) to whom it is 
> addressed. Any use, distribution, copying, disclosure or taking of any 
> action in reliance upon it by any other person is strictly prohibited. 
> If you have received this message in error, please notify the e-mail 
> sender immediately, and delete the original message without making a copy.
>
> The Monitise group comprises: Monitise plc (Reg. No. 6011822), 
> Monitise Group Limited (Reg. No. 5590897), Monitise International 
> Limited (Reg. No. 5556711) and Monitise Europe Limited (Reg. No. 
> 4831976). These companies are registered in England and Wales and 
> their registered office address is: Warnford Court, 29 Throgmorton 
> Street, London, EC2N 2AT United Kingdom.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20120531/45b92995/attachment-0001.html 


More information about the rules-dev mailing list