You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2010/08/13 21:12:02 UTC

svn commit: r985325 - in /synapse/trunk/java/modules/commons/src: main/java/org/apache/synapse/commons/evaluators/ main/java/org/apache/synapse/commons/evaluators/config/ main/java/org/apache/synapse/commons/evaluators/source/ test/java/org/apache/syna...

Author: hiranya
Date: Fri Aug 13 19:12:01 2010
New Revision: 985325

URL: http://svn.apache.org/viewvc?rev=985325&view=rev
Log:
Extended the url text retriever to process fragments of URLs (if needed). Therefore now the match evaluator and the equal evaluator can be used to evaluate full URLs or fragments of URLs. Recognized URL fragments are:
 * protocol
 * host
 * port
 * user info
 * path
 * query
 * ref

The fragment to be matched (evaluated) can be stated using the optional 'fragment' attribute in the <equal> element or the <match> element.



Modified:
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/EvaluatorConstants.java
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualFactory.java
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualSerializer.java
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchFactory.java
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchSerializer.java
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/source/URLTextRetriever.java
    synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualBuilderTest.java
    synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualSerializerTest.java
    synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchBuilderTest.java
    synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchSerializerTest.java

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/EvaluatorConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/EvaluatorConstants.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/EvaluatorConstants.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/EvaluatorConstants.java Fri Aug 13 19:12:01 2010
@@ -36,13 +36,20 @@ public class EvaluatorConstants {
     public static final String SOURCE = "source";
     public static final String REGEX = "regex";
     public static final String VALUE = "value";
+    public static final String FRAGMENT = "fragment";
 
     public static final String CONDITIONS = "conditions";
     public static final String CONDITION = "condition";
     public static final String PRIORITY = "priority";
     public static final String DEFAULT_PRIORITY = "defaultPriority";
 
-    public static final int TYPE_URL = 1;
-    public static final int TYPE_PARAM = 2;
-    public static final int TYPE_HEADER = 3;
+    public static enum URI_FRAGMENTS {
+        protocol,
+        user,
+        host,
+        port,
+        path,
+        query,
+        ref
+    }
 }

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualFactory.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualFactory.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualFactory.java Fri Aug 13 19:12:01 2010
@@ -68,6 +68,10 @@ public class EqualFactory implements Eva
                 }
             } else if (value.equals(EvaluatorConstants.URL)) {
                 textRetriever = new URLTextRetriever();
+                OMAttribute fragAttr = e.getAttribute(new QName(EvaluatorConstants.FRAGMENT));
+                if (fragAttr != null) {
+                    ((URLTextRetriever) textRetriever).setFragment(fragAttr.getAttributeValue());
+                }
             } else {
                 handleException("Unknown equal evaluator type: " + value);
             }

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualSerializer.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualSerializer.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/EqualSerializer.java Fri Aug 13 19:12:01 2010
@@ -59,6 +59,11 @@ public class EqualSerializer extends Abs
         } else {
             equalElement.addAttribute(fac.createOMAttribute(EvaluatorConstants.TYPE, nullNS,
                     EvaluatorConstants.URL));
+            URLTextRetriever urlTextRetriever = (URLTextRetriever) textRetriever;
+            if (urlTextRetriever.getFragment() != null) {
+                equalElement.addAttribute(fac.createOMAttribute(EvaluatorConstants.FRAGMENT,
+                        nullNS, urlTextRetriever.getFragment()));
+            }
         }
 
         equalElement.addAttribute(fac.createOMAttribute(EvaluatorConstants.VALUE, nullNS,

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchFactory.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchFactory.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchFactory.java Fri Aug 13 19:12:01 2010
@@ -70,6 +70,10 @@ public class MatchFactory implements Eva
                 }
             } else if (value.equals(EvaluatorConstants.URL)) {
                 textRetriever = new URLTextRetriever();
+                OMAttribute fragAttr = e.getAttribute(new QName(EvaluatorConstants.FRAGMENT));
+                if (fragAttr != null) {
+                    ((URLTextRetriever) textRetriever).setFragment(fragAttr.getAttributeValue());
+                }
             } else {
                 handleException("Unknown match evaluator type: " + value);
             }

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchSerializer.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchSerializer.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/config/MatchSerializer.java Fri Aug 13 19:12:01 2010
@@ -8,6 +8,7 @@ import org.apache.synapse.commons.evalua
 import org.apache.synapse.commons.evaluators.source.SourceTextRetriever;
 import org.apache.synapse.commons.evaluators.source.HeaderTextRetriever;
 import org.apache.synapse.commons.evaluators.source.ParameterTextRetriever;
+import org.apache.synapse.commons.evaluators.source.URLTextRetriever;
 
 import javax.xml.namespace.QName;
 
@@ -41,6 +42,11 @@ public class MatchSerializer extends Abs
         } else {
             matchElement.addAttribute(fac.createOMAttribute(EvaluatorConstants.TYPE, nullNS,
                     EvaluatorConstants.URL));
+            URLTextRetriever urlTextRetriever = (URLTextRetriever) textRetriever;
+            if (urlTextRetriever.getFragment() != null) {
+                matchElement.addAttribute(fac.createOMAttribute(EvaluatorConstants.FRAGMENT,
+                        nullNS, urlTextRetriever.getFragment()));
+            }
         }
 
         matchElement.addAttribute(fac.createOMAttribute(EvaluatorConstants.REGEX, nullNS,

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/source/URLTextRetriever.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/source/URLTextRetriever.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/source/URLTextRetriever.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/evaluators/source/URLTextRetriever.java Fri Aug 13 19:12:01 2010
@@ -21,10 +21,51 @@ package org.apache.synapse.commons.evalu
 
 import org.apache.synapse.commons.evaluators.EvaluatorContext;
 import org.apache.synapse.commons.evaluators.EvaluatorException;
+import org.apache.synapse.commons.evaluators.EvaluatorConstants;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.net.URI;
+import java.net.URISyntaxException;
 
 public class URLTextRetriever implements SourceTextRetriever {
 
+    private static final Log log = LogFactory.getLog(URLTextRetriever.class);
+
+    private EvaluatorConstants.URI_FRAGMENTS fragment = null;
+
     public String getSourceText(EvaluatorContext context) throws EvaluatorException {
-        return context.getUrl();
+        if (fragment == null) {
+            return context.getUrl();
+        }
+
+        try {
+            URI uri = new URI(context.getUrl());
+            switch (fragment) {
+                case protocol: return uri.getScheme();
+                case user: return uri.getUserInfo();
+                case host: return uri.getHost();
+                case port: return String.valueOf(uri.getPort());
+                case path: return uri.getPath();
+                case query: return uri.getQuery();
+                case ref: return uri.getFragment();
+                default: return context.getUrl();
+            }
+        } catch (URISyntaxException e) {
+            String message = "Error parsing URL: " + context.getUrl();
+            log.error(message);
+            throw new EvaluatorException(message);
+        }
+    }
+
+    public String getFragment() {
+        if (fragment != null) {
+            return fragment.name();
+        }
+        return null;
+    }
+
+    public void setFragment(String fragment) {
+        this.fragment = EvaluatorConstants.URI_FRAGMENTS.valueOf(fragment);
     }
 }

Modified: synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualBuilderTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualBuilderTest.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualBuilderTest.java (original)
+++ synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualBuilderTest.java Fri Aug 13 19:12:01 2010
@@ -31,6 +31,7 @@ public class EqualBuilderTest extends Te
 
     private static final String SOURCE = "foo";
     private static final String VALUE = "bar";
+    private static final String FRAGMENT = "protocol";
 
     private EqualFactory fac = new EqualFactory();
 
@@ -72,6 +73,22 @@ public class EqualBuilderTest extends Te
             SourceTextRetriever txtRtvr = eval.getTextRetriever();
             assertTrue(txtRtvr instanceof URLTextRetriever);
             assertEquals(eval.getValue(), VALUE);
+            assertNull(((URLTextRetriever) txtRtvr).getFragment());
+        } catch (Exception e) {
+            fail("Error while parsing the input XML");
+        }
+    }
+
+    public void testURLEqual2() {
+        String input = "<equal type=\"url\" value=\"" + VALUE + "\"" +
+                " fragment=\"" + FRAGMENT + "\"/>";
+
+        try {
+            EqualEvaluator eval = (EqualEvaluator) fac.create(AXIOMUtil.stringToOM(input));
+            SourceTextRetriever txtRtvr = eval.getTextRetriever();
+            assertTrue(txtRtvr instanceof URLTextRetriever);
+            assertEquals(eval.getValue(), VALUE);
+            assertEquals(((URLTextRetriever) txtRtvr).getFragment(), FRAGMENT);
         } catch (Exception e) {
             fail("Error while parsing the input XML");
         }

Modified: synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualSerializerTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualSerializerTest.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualSerializerTest.java (original)
+++ synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/EqualSerializerTest.java Fri Aug 13 19:12:01 2010
@@ -64,4 +64,16 @@ public class EqualSerializerTest extends
             fail("Error while parsing the input XML");
         }
     }
+
+    public void testURLEqualSerializer2() {
+        String input = "<equal type=\"url\" value=\"http://foo.org\" fragment=\"protocol\"/>";
+
+        try {
+            Evaluator eval = fac.create(AXIOMUtil.stringToOM(input));
+            OMElement output = serializer.serialize(null, eval);
+            assertXMLEqual(input, output.toString());
+        } catch (Exception e) {
+            fail("Error while parsing the input XML");
+        }
+    }
 }

Modified: synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchBuilderTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchBuilderTest.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchBuilderTest.java (original)
+++ synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchBuilderTest.java Fri Aug 13 19:12:01 2010
@@ -31,6 +31,7 @@ public class MatchBuilderTest extends Te
 
     private static final String SOURCE = "foo";
     private static final String REGEX = "bar";
+    private static final String FRAGMENT = "protocol";
 
     private MatchFactory fac = new MatchFactory();
 
@@ -72,6 +73,23 @@ public class MatchBuilderTest extends Te
             SourceTextRetriever txtRtvr = eval.getTextRetriever();
             assertTrue(txtRtvr instanceof URLTextRetriever);
             assertEquals(eval.getRegex().pattern(), REGEX);
+            assertNull(((URLTextRetriever) txtRtvr).getFragment());
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail("Error while parsing the input XML");
+        }
+    }
+
+    public void testURLMatch2() {
+        String input = "<match type=\"url\" regex=\"" + REGEX + "\" fragment=\"" +
+                FRAGMENT +"\"/>";
+
+        try {
+            MatchEvaluator eval = (MatchEvaluator) fac.create(AXIOMUtil.stringToOM(input));
+            SourceTextRetriever txtRtvr = eval.getTextRetriever();
+            assertTrue(txtRtvr instanceof URLTextRetriever);
+            assertEquals(eval.getRegex().pattern(), REGEX);
+            assertEquals(((URLTextRetriever) txtRtvr).getFragment(), FRAGMENT);
         } catch (Exception e) {
             fail("Error while parsing the input XML");
         }

Modified: synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchSerializerTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchSerializerTest.java?rev=985325&r1=985324&r2=985325&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchSerializerTest.java (original)
+++ synapse/trunk/java/modules/commons/src/test/java/org/apache/synapse/commons/evaluators/config/MatchSerializerTest.java Fri Aug 13 19:12:01 2010
@@ -64,4 +64,16 @@ public class MatchSerializerTest extends
             fail("Error while parsing the input XML");
         }
     }
+
+    public void testURLMatchSerializer2() {
+        String input = "<match type=\"url\" regex=\"http://foo.org\" fragment=\"protocol\"/>";
+
+        try {
+            Evaluator eval = fac.create(AXIOMUtil.stringToOM(input));
+            OMElement output = serializer.serialize(null, eval);
+            assertXMLEqual(input, output.toString());
+        } catch (Exception e) {
+            fail("Error while parsing the input XML");
+        }
+    }
 }