Hi<br><br>I&#39;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?&nbsp; Has anyone noticed this problem too?<br>
<br>&nbsp;&nbsp;&nbsp; public static String convertDrlToXmlRule(String drlRule) throws DroolsParserException<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DrlParser parser = new DrlParser();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; PackageDescr descr = parser.parse(drlRule);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Dump to xml rule.<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; XmlDumper dumper = new XmlDumper();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return dumper.dump(descr);<br>&nbsp;&nbsp;&nbsp; }<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>&nbsp;&nbsp;&nbsp; public static String exampleRule = &quot;package com.rules;&quot; +<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;import com.rules.my.test.Message;&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;import com.rules.my.test.SubMessage;&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;import com.rules.my.test.SubSubMessage;&quot; +<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;rule \&quot;exampleRule\&quot;&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; dialect \&quot;mvel\&quot;&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; when&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message( $subMessage : subMessage)\n&quot; +<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SubMessage( $subSubMessage : subSubMessage) from $subMessage\n&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SubSubMessage( message == \&quot;SubSub\&quot;) from $subSubMessage\n&quot; +<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; \nthen\n&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println( $subMessage );&quot; +<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &quot;&nbsp;&nbsp;&nbsp; end&quot;;<br><br>What comes out:<br>
<br>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; <br>&nbsp;&lt;package name=&quot;com.rules&quot;&nbsp; <br>&nbsp;&nbsp;&nbsp; xmlns=&quot;<a href="http://drools.org/drools-4.0">http://drools.org/drools-4.0</a>&quot; <br>&nbsp;&nbsp;&nbsp; xmlns:xs=&quot;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>&quot; <br>
&nbsp;&nbsp;&nbsp; xs:schemaLocation=&quot;<a href="http://drools.org/drools-4.0">http://drools.org/drools-4.0</a> drools-4.0.xsd&quot;&gt; <br>&lt;import name=&quot;com.rules.my.test.Message&quot; /&gt; <br>&lt;import name=&quot;com.rules.my.test.SubMessage&quot; /&gt; <br>
&lt;import name=&quot;com.rules.my.test.SubSubMessage&quot; /&gt; <br>&lt;rule name=&quot;exampleRule &quot;&gt;<br>&lt;rule-attribute name=&quot;dialect&quot; value=&quot;mvel&quot; /&gt;<br>&lt;lhs&gt;<br>&nbsp;&nbsp;&nbsp; &lt;pattern object-type=&quot;Message&quot; &gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;field-binding field-name=&quot;subMessage&quot; identifier=&quot;$subMessage&quot; /&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/pattern&gt;<br>&nbsp;&nbsp;&nbsp; &lt;pattern object-type=&quot;SubMessage&quot; &gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;field-binding field-name=&quot;subSubMessage&quot; identifier=&quot;$subSubMessage&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;field-binding field-name=&quot;subSubMessage&quot; identifier=&quot;$subSubMessage&quot; /&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;from&gt; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;expression&gt; $subMessage &lt;/expression&gt; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/from&gt; <br>
&nbsp;&nbsp;&nbsp; &lt;/pattern&gt;<br>&nbsp;&nbsp;&nbsp; &lt;pattern object-type=&quot;SubSubMessage&quot; &gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;field-constraint field-name=&quot;message&quot;&gt; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;literal-restriction evaluator=&quot;==&quot; value=&quot;SubSub&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/field-constraint&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;field-constraint field-name=&quot;message&quot;&gt; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;literal-restriction evaluator=&quot;==&quot; value=&quot;SubSub&quot; /&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/field-constraint&gt; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;from&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;expression&gt; $subSubMessage &lt;/expression&gt; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/from&gt; <br>&nbsp;&nbsp;&nbsp; &lt;/pattern&gt;<br>&lt;/lhs&gt;<br>&lt;rhs&gt;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; System.out.println( $subMessage );&nbsp;&nbsp;&nbsp; <br>
&lt;/rhs&gt;<br>&lt;/rule&gt;<br>&lt;/package&gt;<br><br><br>If you noticed above it comes out with duplicate field-constaints for pattern SubSubMessage??&nbsp; However, thats not a big problem, when I try to compile the rule in XML format it throws:<br>
<br>org.xml.sax.SAXParseException: &lt;from&gt; is after an invalid element: org.drools.xml.Handler<br>&nbsp;&nbsp;&nbsp; at org.drools.xml.XmlPackageReader.validate(XmlPackageReader.java:506)<br>&nbsp;&nbsp;&nbsp; at org.drools.xml.XmlPackageReader.startElement(XmlPackageReader.java:394)<br>
&nbsp;&nbsp;&nbsp; at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)<br>
&nbsp;&nbsp;&nbsp; at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)<br>
&nbsp;&nbsp;&nbsp; at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)<br>
&nbsp;&nbsp;&nbsp; at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.xml.XmlPackageReader.read(XmlPackageReader.java:321)<br>
&nbsp;&nbsp;&nbsp; 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>