[rules-dev] [rules-users] DRL to XML transformation
Mark Proctor
mproctor at codehaus.org
Fri Jun 1 17:07:07 EDT 2012
On 01/06/2012 02:24, Mark Proctor wrote:
> 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.
sorry I mean it would be impossible.
>
> 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