Hi<br><br>I'm currently trying to create a simple example in converting a DRL rule into an XML rule and compiling that but it seems that the XML conversion is not working correctly or have I done something wrong? Has anyone noticed this problem too?<br>
<br> public static String convertDrlToXmlRule(String drlRule) throws DroolsParserException<br> {<br> DrlParser parser = new DrlParser();<br> PackageDescr descr = parser.parse(drlRule);<br><br> // Dump to xml rule.<br>
XmlDumper dumper = new XmlDumper();<br> return dumper.dump(descr);<br> }<br><br>the code above converts a drlRule and dumps out an XML format.<br><br>My example drl rule (this compiles fine):<br><br> public static String exampleRule = "package com.rules;" +<br>
"import com.rules.my.test.Message;" +<br> "import com.rules.my.test.SubMessage;" +<br> "import com.rules.my.test.SubSubMessage;" +<br>
"rule \"exampleRule\"" +<br> " dialect \"mvel\"" +<br> " when" +<br> " Message( $subMessage : subMessage)\n" +<br>
" SubMessage( $subSubMessage : subSubMessage) from $subMessage\n" +<br> " SubSubMessage( message == \"SubSub\") from $subSubMessage\n" +<br>
" \nthen\n" +<br> " System.out.println( $subMessage );" +<br> " end";<br><br>What comes out:<br>
<br><?xml version="1.0" encoding="UTF-8"?> <br> <package name="com.rules" <br> xmlns="<a href="http://drools.org/drools-4.0">http://drools.org/drools-4.0</a>" <br> xmlns:xs="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" <br>
xs:schemaLocation="<a href="http://drools.org/drools-4.0">http://drools.org/drools-4.0</a> drools-4.0.xsd"> <br><import name="com.rules.my.test.Message" /> <br><import name="com.rules.my.test.SubMessage" /> <br>
<import name="com.rules.my.test.SubSubMessage" /> <br><rule name="exampleRule "><br><rule-attribute name="dialect" value="mvel" /><br><lhs><br> <pattern object-type="Message" ><br>
<field-binding field-name="subMessage" identifier="$subMessage" /><br> </pattern><br> <pattern object-type="SubMessage" ><br> <field-binding field-name="subSubMessage" identifier="$subSubMessage" /><br>
<field-binding field-name="subSubMessage" identifier="$subSubMessage" /><br> <from> <br> <expression> $subMessage </expression> <br> </from> <br>
</pattern><br> <pattern object-type="SubSubMessage" ><br> <field-constraint field-name="message"> <br> <literal-restriction evaluator="==" value="SubSub" /><br>
</field-constraint><br> <field-constraint field-name="message"> <br> <literal-restriction evaluator="==" value="SubSub" /><br> </field-constraint> <br>
<from><br> <expression> $subSubMessage </expression> <br> </from> <br> </pattern><br></lhs><br><rhs> <br> System.out.println( $subMessage ); <br>
</rhs><br></rule><br></package><br><br><br>If you noticed above it comes out with duplicate field-constaints for pattern SubSubMessage?? However, thats not a big problem, when I try to compile the rule in XML format it throws:<br>
<br>org.xml.sax.SAXParseException: <from> is after an invalid element: org.drools.xml.Handler<br> at org.drools.xml.XmlPackageReader.validate(XmlPackageReader.java:506)<br> at org.drools.xml.XmlPackageReader.startElement(XmlPackageReader.java:394)<br>
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)<br> at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)<br> at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)<br>
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)<br> at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)<br> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)<br>
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)<br> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)<br> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)<br>
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)<br> at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)<br> at org.drools.xml.XmlPackageReader.read(XmlPackageReader.java:321)<br>
at org.drools.xml.XmlPackageReader.read(XmlPackageReader.java:247)<br><br><br>Any suggestions in what I am doing wrong?<br><br>Cheers,<br><br>Le.<br><br><br><br><br><br><br>