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

Wolfgang Laun wolfgang.laun at gmail.com
Thu May 31 13:00:41 EDT 2012


On 31/05/2012, Michael Anstis <michael.anstis at gmail.com> wrote:
> I have a feeling you're not going to be pleased.

'Tis not a consummation devoutly to be wished by this person.

But you might warn Anirban that this isn't a matter of ripping off a
simple XSLT.
-W

>
> 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
>>
>



More information about the rules-dev mailing list