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

Mark Proctor mproctor at codehaus.org
Thu May 31 21:24:10 EDT 2012


On 31/05/2012 14:43, Wolfgang Laun 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.
The xml only supports features up to 4.x. So it would be possible to 
dump 5.4.x features to xml.

Currently there are no plans to alter this, unless someone wants to 
volunteer. We are unlikely to accept a peace meal job, so if someone 
volunteers, they will need to do it thoroughly and completely.

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