Author: saminda
Date: Wed Oct 19 02:16:22 2005
New Revision: 326492

URL: http://svn.apache.org/viewcvs?rev=326492&view=rev
Log:
RuleEngine updated to handle xpath through jaxen

Modified:
    
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/SynapseConstants.java
    
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleConfiguration.java
    
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleReader.java

Modified: 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/SynapseConstants.java
URL: 
http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/SynapseConstants.java?rev=326492&r1=326491&r2=326492&view=diff
==============================================================================
--- 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/SynapseConstants.java
 (original)
+++ 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/SynapseConstants.java
 Wed Oct 19 02:16:22 2005
@@ -17,6 +17,9 @@
     public interface SynapseRuleReader {
         public static final String CONDITION = "condition";
         public static final String MEDIATOR = "mediator";
+        public static final String NAMESPACE = "ns";
+        public static final String PRIFIX = "prifix";
+        public static final String URI = "uri";
     }
     public interface SynapseRuleEngine {
         public static final String CUMULATIVE_RUEL_ARRAY_LIST="cumulative";

Modified: 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleConfiguration.java
URL: 
http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleConfiguration.java?rev=326492&r1=326491&r2=326492&view=diff
==============================================================================
--- 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleConfiguration.java
 (original)
+++ 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleConfiguration.java
 Wed Oct 19 02:16:22 2005
@@ -2,7 +2,10 @@
 
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.soap.SOAPEnvelope;
 import org.apache.axis2.om.xpath.AXIOMXPath;
+import org.apache.axis2.om.OMDocument;
+import org.apache.axis2.om.OMAbstractFactory;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.synapse.SynapseConstants;
 import org.jaxen.JaxenException;
@@ -10,9 +13,9 @@
 import org.jaxen.SimpleNamespaceContext;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.HashMap;
 
 /**
  * Created by IntelliJ IDEA.
@@ -97,6 +100,16 @@
             throws JaxenException {
         Iterator ruleIte = ruleReader.getRulesIterator();
 
+        /**
+         * Need registering qulified namesapaces to Jaxen to work on
+         * xpath.
+         */
+        HashMap namespacesMap = ruleReader.getNamespaceMap();
+
+
+        SOAPEnvelope envelope = messageContext.getEnvelope();
+        envelope.build();
+
         while (ruleIte.hasNext()) {
             SynapaseRuleBean bean = (SynapaseRuleBean) ruleIte.next();
             /**
@@ -106,22 +119,32 @@
                 // this could be more than this.
                 this.generalRuleList.add(bean);
             } else {
+
+                Iterator nsIte = namespacesMap.entrySet().iterator();
+                Map.Entry entry = null;
+                String prifix = null;
+                String uri = null;
+
+                //settingup the namespace which needed to be dealt with care
+                SimpleNamespaceContext nsCtx = new SimpleNamespaceContext();
+
+                while (nsIte.hasNext()) {
+                    entry = (Map.Entry) nsIte.next();
+                    prifix = (String) entry.getKey();
+                    uri = (String) entry.getValue();
+                    nsCtx.addNamespace(prifix, uri);
+                }
+
                 // which deal with the xpath of the message
                 String xpathExpression = bean.getCondition();
                 XPath xpath = new AXIOMXPath(xpathExpression);
 
-                //settingup the namespace which needed to be dealt with care
-                SimpleNamespaceContext nameSpace = new 
SimpleNamespaceContext();
-                //add the relevent name spaces
-                //-------------------- as an Example
-                nameSpace.addNamespace("synapse", 
"http://synapse.org/synapse";);
-                //--------------------
-                xpath.setNamespaceContext(nameSpace);
+                xpath.setNamespaceContext(nsCtx);
                 /**
                  * Xpath validation for the incomming message.
                  */
                 boolean xpathBool = xpath
-                        .booleanValueOf(messageContext.getEnvelope());
+                        .booleanValueOf(envelope);
 
                 if (xpathBool) {
                     this.xpathRuleList.add(bean);
@@ -136,7 +159,9 @@
         cumulativeRuleList.addAll(generalRuleList);
         cumulativeRuleList.addAll(xpathRuleList);
 
-        
messageContext.setProperty(SynapseConstants.SynapseRuleEngine.CUMULATIVE_RUEL_ARRAY_LIST,
 cumulativeRuleList);
+        messageContext.setProperty(
+                SynapseConstants.SynapseRuleEngine.CUMULATIVE_RUEL_ARRAY_LIST,
+                cumulativeRuleList);
     }
 
 }

Modified: 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleReader.java
URL: 
http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleReader.java?rev=326492&r1=326491&r2=326492&view=diff
==============================================================================
--- 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleReader.java
 (original)
+++ 
incubator/synapse/trunk/scratch/saminda/synapse2/src/org/apache/synapse/rules/SynapseRuleReader.java
 Wed Oct 19 02:16:22 2005
@@ -3,6 +3,7 @@
 import org.apache.axis2.om.OMElement;
 import org.apache.axis2.om.OMFactory;
 import org.apache.axis2.om.OMAbstractFactory;
+import org.apache.axis2.om.OMAttribute;
 import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;
 import org.apache.axis2.AxisFault;
 import org.apache.synapse.SynapseConstants;
@@ -12,6 +13,7 @@
 import javax.xml.stream.XMLStreamException;
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.HashMap;
 import java.io.InputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -28,11 +30,14 @@
     public static final String RULE_XML = "synapse.xml";
     private ArrayList ruleList;
 
+    private HashMap namespaceMap;
+
     public SynapseRuleReader() {
         ruleList = new ArrayList();
+        namespaceMap = new HashMap();
     }
 
-    public  OMElement readRules()
+    public OMElement readRules()
             throws AxisFault {
 
         try {
@@ -65,6 +70,7 @@
         OMElement rules = readRules();
         if (rules != null) {
             this.fillBean(rules);
+            this.fillNamespaces(rules);
         }
 
     }
@@ -99,6 +105,40 @@
 
     public Iterator getRulesIterator() {
         return ruleList.iterator();
+    }
+
+    public HashMap getNamespaceMap() {
+        return namespaceMap;
+    }
+
+    private void fillNamespaces(OMElement ele) {
+        Iterator ite = ele.getChildElements();
+        while (ite.hasNext()) {
+            OMElement ruleEle = (OMElement) ite.next();
+            Iterator nsIte = ruleEle.getChildElements();
+            while (nsIte.hasNext()) {
+                OMElement nsEle = (OMElement) nsIte.next();
+                if (nsEle.getLocalName().equalsIgnoreCase(
+                        SynapseConstants.SynapseRuleReader.NAMESPACE)) {
+                    Iterator attIte = nsEle.getAllAttributes();
+                    String prifix = null;
+                    String uri = null;
+                    while (attIte.hasNext()) {
+                        OMAttribute att = (OMAttribute) attIte.next();
+                        if (att.getLocalName().equalsIgnoreCase(
+                                SynapseConstants.SynapseRuleReader.PRIFIX)) {
+                            prifix = att.getValue();
+                        }
+                        if (att.getLocalName().equalsIgnoreCase(
+                                SynapseConstants.SynapseRuleReader.URI)) {
+                            uri = att.getValue();
+                        }
+
+                    }
+                    namespaceMap.put(prifix, uri);
+                }
+            }
+        }
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to