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

Michael Anstis michael.anstis at gmail.com
Thu May 31 11:15:47 EDT 2012


I have a feeling you're not going to be pleased.

On 31 May 2012 14:43, Wolfgang Laun <wolfgang.laun at gmail.com> wrote:

> The result of XmlDumper in its current state may not accurately reflect all
> that can now (5.4.0) be written in DRL. At least I got that impression when
> I was looking at XmlDumper earlier (IIRC ~5.2.0) and found some glitches
> even then.
>
> Mark, Michael: I'd be pleased to learn that this has been fixed. :)
>
> -W
>
>
> On 31/05/2012, Michael Anstis <michael.anstis at gmail.com> wrote:
> > The XML format produced by XmlDumper is an XML representation of various
> > internal Descriptors used by Drools Expert and only supports features up
> to
> > 4.0
> >
> > It is unfortunately not the same as that stored internally in Guvnor
> (which
> > is simply a XStream representation of Guvnor's internal model).
> >
> > Furthermore Guvnor's internal representation is private and subject to
> > change from release to release.
> >
> > There is no easy way to convert from one to the other, other than writing
> > your own XSLT.
> >
> > With kind regards,
> >
> > Mike
> >
> > On 29 May 2012 13:36, Anirban Bandyopadhyay <
> > Anirban.Bandyopadhyay at monitisegroup.com> wrote:
> >
> >>  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
> >> 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/8c1dab5c/attachment-0001.html 


More information about the rules-dev mailing list