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@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to