Author: hiranya
Date: Thu Aug 26 08:04:58 2010
New Revision: 989517
URL: http://svn.apache.org/viewvc?rev=989517&view=rev
Log:
Refactoring
Added:
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
Modified:
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java
Modified:
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
---
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
(original)
+++
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteAction.java
Thu Aug 26 08:04:58 2010
@@ -21,7 +21,6 @@ package org.apache.synapse.mediators;
import org.apache.synapse.util.xpath.SynapseXPath;
import org.apache.synapse.MessageContext;
-import org.apache.synapse.SynapseException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -41,10 +40,12 @@ public class RewriteAction {
private String value;
private SynapseXPath xpath;
private String regex;
- private int fragmentIndex = URLRewriteMediator.FULL_URI;
+ private int fragmentIndex = URIFragments.FULL_URI;
private int actionType = ACTION_SET;
- public void execute(Object[] fragments, MessageContext messageContext) {
+ public void execute(URIFragments fragments,
+ MessageContext messageContext) throws
URISyntaxException {
+
String result;
if (xpath != null) {
result = xpath.stringValueOf(messageContext);
@@ -52,66 +53,41 @@ public class RewriteAction {
result = value;
}
- if (fragmentIndex == URLRewriteMediator.FULL_URI) {
- try {
- URI uri;
- if (result != null) {
- uri = new URI(result);
- if (log.isTraceEnabled()) {
- log.trace("Setting the URI to: " + result);
- }
- } else {
- uri = new URI("");
+ if (fragmentIndex == URIFragments.FULL_URI) {
+ URI uri;
+ if (result != null) {
+ uri = new URI(result);
+ if (log.isTraceEnabled()) {
+ log.trace("Setting the URI to: " + result);
}
-
- fragments[URLRewriteMediator.PROTOCOL] = uri.getScheme();
- fragments[URLRewriteMediator.USER_INFO] = uri.getUserInfo();
- fragments[URLRewriteMediator.HOST] = uri.getHost();
- fragments[URLRewriteMediator.PORT] = uri.getPort();
- // The uri.getPath() return the empty string for empty URIs
- // We are better off setting it to null
- fragments[URLRewriteMediator.PATH] = "".equals(uri.getPath())
? null : uri.getPath();
- fragments[URLRewriteMediator.QUERY] = uri.getQuery();
- fragments[URLRewriteMediator.REF] = uri.getFragment();
-
- } catch (URISyntaxException e) {
- String msg = "Error while setting the URL to: " + result;
- log.error(msg, e);
- throw new SynapseException(msg, e);
+ } else {
+ uri = new URI("");
}
- } else if (fragmentIndex == URLRewriteMediator.PORT) {
+
+ fragments.setFragments(uri);
+
+ } else if (fragmentIndex == URIFragments.PORT) {
// When setting the port we must first convert the value into an
integer
if (result != null) {
- fragments[fragmentIndex] = Integer.parseInt(result);
+ fragments.setPort(Integer.parseInt(result));
} else {
- fragments[fragmentIndex] = -1;
+ fragments.setPort(-1);
}
} else {
String str;
- switch (actionType) {
- case ACTION_PREPEND:
- str = result +
- (fragments[fragmentIndex] != null ?
fragments[fragmentIndex] : "");
- break;
-
- case ACTION_APPEND:
- str = (fragments[fragmentIndex] != null ?
fragments[fragmentIndex] : "") +
- result;
- break;
-
- case ACTION_REPLACE:
- str = (fragments[fragmentIndex] != null ? (String)
fragments[fragmentIndex] : "");
- str = str.replaceAll(regex, result);
- break;
-
- case ACTION_REMOVE:
- str = null;
- break;
+ String currentValue = fragments.getStringFragment(fragmentIndex);
+ if (currentValue == null) {
+ currentValue = "";
+ }
- default:
- str = result;
+ switch (actionType) {
+ case ACTION_PREPEND : str = result + currentValue; break;
+ case ACTION_APPEND : str = currentValue + result; break;
+ case ACTION_REPLACE : str = currentValue.replaceAll(regex,
result); break;
+ case ACTION_REMOVE : str = null; break;
+ default : str = result;
}
- fragments[fragmentIndex] = str;
+ fragments.setStringFragment(fragmentIndex, str);
}
}
Modified:
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
---
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java
(original)
+++
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/RewriteRule.java
Thu Aug 26 08:04:58 2010
@@ -23,14 +23,12 @@ import org.apache.synapse.commons.evalua
import org.apache.synapse.commons.evaluators.EvaluatorContext;
import org.apache.synapse.commons.evaluators.EvaluatorException;
import org.apache.synapse.MessageContext;
-import org.apache.synapse.SynapseException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
-import java.net.URI;
import java.net.URISyntaxException;
public class RewriteRule {
@@ -40,11 +38,11 @@ public class RewriteRule {
private Evaluator condition;
private List<RewriteAction> actions = new ArrayList<RewriteAction>();
- public void rewrite(Object[] fragments, MessageContext messageContext,
- Map<String,String> headers) {
+ public void rewrite(URIFragments fragments, MessageContext messageContext,
+ Map<String,String> headers) throws URISyntaxException {
if (condition != null) {
- String uriString = getURIString(fragments);
+ String uriString = fragments.toURIString();
EvaluatorContext ctx = new EvaluatorContext(uriString, headers);
if (log.isTraceEnabled()) {
log.trace("Evaluating condition with URI: " + uriString);
@@ -83,21 +81,4 @@ public class RewriteRule {
public void addRewriteAction(RewriteAction action) {
actions.add(action);
}
-
- private String getURIString(Object[] fragments) {
- try {
- return new URI(
- (String) fragments[URLRewriteMediator.PROTOCOL],
- (String) fragments[URLRewriteMediator.USER_INFO],
- (String) fragments[URLRewriteMediator.HOST],
- (Integer) fragments[URLRewriteMediator.PORT],
- (String) fragments[URLRewriteMediator.PATH],
- (String) fragments[URLRewriteMediator.QUERY],
- (String) fragments[URLRewriteMediator.REF]).toString();
- } catch (URISyntaxException e) {
- String msg = "Error while constructing the URI from fragments";
- log.error(msg, e);
- throw new SynapseException(msg, e);
- }
- }
}
Added:
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java?rev=989517&view=auto
==============================================================================
---
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
(added)
+++
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URIFragments.java
Thu Aug 26 08:04:58 2010
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2005-2008, WSO2 Inc. (http://www.wso2.org) All Rights
Reserved.
+ *
+ * WSO2 Inc. licenses this file to you under the Apache License,
+ * Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.synapse.mediators;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class URIFragments {
+
+ public static final int FULL_URI = -2;
+ public static final int PORT = -1;
+
+ public static final int PROTOCOL = 0;
+ public static final int USER_INFO = 1;
+ public static final int HOST = 2;
+ public static final int PATH = 3;
+ public static final int QUERY = 4;
+ public static final int REF = 5;
+
+ private int port = -1;
+ private String[] fragments = new String[6];
+
+ public URIFragments() {
+
+ }
+
+ public URIFragments(URI uri) {
+ setFragments(uri);
+ }
+
+ public void setFragments(URI uri) {
+ fragments[PROTOCOL] = uri.getScheme();
+ fragments[USER_INFO] = uri.getUserInfo();
+ fragments[HOST] = uri.getHost();
+ fragments[PATH] = ("".equals(uri.getPath()) ? null : uri.getPath());
+ fragments[QUERY] = uri.getQuery();
+ fragments[REF] = uri.getFragment();
+ port = uri.getPort();
+ }
+
+ public void setPort(int port) {
+ this.port = port;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public void setStringFragment(int index, String value) {
+ fragments[index] = value;
+ }
+
+ public String getStringFragment(int index) {
+ return fragments[index];
+ }
+
+ public URI toURI() throws URISyntaxException {
+ return new URI(
+ fragments[PROTOCOL],
+ fragments[USER_INFO],
+ fragments[HOST],
+ port,
+ fragments[PATH],
+ fragments[QUERY],
+ fragments[REF]);
+ }
+
+ public String toURIString() throws URISyntaxException {
+ return toURI().toString();
+ }
+}
Modified:
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
---
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
(original)
+++
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/URLRewriteMediator.java
Thu Aug 26 08:04:58 2010
@@ -32,72 +32,56 @@ import java.util.ArrayList;
public class URLRewriteMediator extends AbstractMediator {
- public static final int FULL_URI = -1;
- public static final int PROTOCOL = 0;
- public static final int USER_INFO = 1;
- public static final int HOST = 2;
- public static final int PORT = 3;
- public static final int PATH = 4;
- public static final int QUERY = 5;
- public static final int REF = 6;
-
private List<RewriteRule> rules = new ArrayList<RewriteRule>();
private String inputProperty;
private String outputProperty;
public boolean mediate(MessageContext messageContext) {
- Object[] fragments = newFragmentSet();
- URI uri;
-
- String address = getInputAddress(messageContext);
- if (address != null) {
- try {
- uri = new URI(address);
- fragments[0] = uri.getScheme();
- fragments[1] = uri.getUserInfo();
- fragments[2] = uri.getHost();
- fragments[3] = uri.getPort();
- fragments[4] = uri.getPath();
- fragments[5] = uri.getQuery();
- fragments[6] = uri.getFragment();
-
- } catch (URISyntaxException e) {
- handleException("Malformed URI in the input address field", e,
messageContext);
- return false;
- }
+ URIFragments fragments;
+ URI inputURI = getInputAddress(messageContext);
+ if (inputURI != null) {
+ fragments = new URIFragments(inputURI);
+ } else {
+ fragments = new URIFragments();
}
Map<String, String> headers = getHeaders(messageContext);
- for (RewriteRule r : rules) {
- r.rewrite(fragments, messageContext, headers);
- }
- uri = getURI(fragments, messageContext);
+ try {
+ for (RewriteRule r : rules) {
+ r.rewrite(fragments, messageContext, headers);
+ }
- if (outputProperty != null) {
- messageContext.setProperty(outputProperty, uri.toString());
- } else {
- messageContext.setTo(new EndpointReference(uri.toString()));
+ if (outputProperty != null) {
+ messageContext.setProperty(outputProperty,
fragments.toURIString());
+ } else {
+ messageContext.setTo(new
EndpointReference(fragments.toURIString()));
+ }
+ } catch (URISyntaxException e) {
+ handleException("Error while constructing a URI from the
fragments", e, messageContext);
}
return true;
}
- private String getInputAddress(MessageContext messageContext) {
+ private URI getInputAddress(MessageContext messageContext) {
+ String uriString = null;
if (inputProperty != null) {
Object prop = messageContext.getProperty(inputProperty);
if (prop != null && prop instanceof String) {
- return (String) prop;
+ uriString = (String) prop;
}
} else if (messageContext.getTo() != null) {
- return messageContext.getTo().getAddress();
+ uriString = messageContext.getTo().getAddress();
}
- return null;
- }
- private Object[] newFragmentSet() {
- return new Object[] {
- null, null, null, -1, null, null, null
- };
+ if (uriString != null) {
+ try {
+ return new URI(uriString);
+ } catch (URISyntaxException e) {
+ handleException("Malformed input URI: " + uriString, e,
messageContext);
+ }
+ }
+ return null;
}
private Map<String, String> getHeaders(MessageContext synCtx) {
@@ -119,22 +103,6 @@ public class URLRewriteMediator extends
return evaluatorHeaders;
}
- private URI getURI(Object[] fragments, MessageContext messageContext) {
- try {
- return new URI(
- (String) fragments[0],
- (String) fragments[1],
- (String) fragments[2],
- (Integer) fragments[3],
- (String) fragments[4],
- (String) fragments[5],
- (String) fragments[6]);
- } catch (URISyntaxException e) {
- handleException("Error while constructing the URI from fragments",
e, messageContext);
- }
- return null;
- }
-
public void addRule(RewriteRule rule) {
rules.add(rule);
}
Modified:
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
---
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java
(original)
+++
synapse/trunk/scratch/hiranya/urlrewrite/src/main/java/org/apache/synapse/mediators/config/xml/URLRewriteMediatorFactory.java
Thu Aug 26 08:04:58 2010
@@ -30,6 +30,7 @@ import org.apache.synapse.commons.evalua
import org.apache.synapse.mediators.URLRewriteMediator;
import org.apache.synapse.mediators.RewriteRule;
import org.apache.synapse.mediators.RewriteAction;
+import org.apache.synapse.mediators.URIFragments;
import org.apache.axiom.om.OMElement;
import org.jaxen.JaxenException;
@@ -115,34 +116,29 @@ public class URLRewriteMediatorFactory e
String fragment = actionElt.getAttributeValue(new QName("fragment"));
if (fragment != null) {
if ("protocol".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.PROTOCOL);
+ action.setFragmentIndex(URIFragments.PROTOCOL);
} else if ("user".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.USER_INFO);
+ action.setFragmentIndex(URIFragments.USER_INFO);
} else if ("host".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.HOST);
+ action.setFragmentIndex(URIFragments.HOST);
} else if ("port".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.PORT);
+ action.setFragmentIndex(URIFragments.PORT);
} else if ("path".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.PATH);
+ action.setFragmentIndex(URIFragments.PATH);
} else if ("query".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.QUERY);
+ action.setFragmentIndex(URIFragments.QUERY);
} else if ("ref".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.REF);
+ action.setFragmentIndex(URIFragments.REF);
} else if ("full".equals(fragment)) {
- action.setFragmentIndex(URLRewriteMediator.FULL_URI);
+ action.setFragmentIndex(URIFragments.FULL_URI);
} else {
handleException("Unknown URL fragment name: " + fragment);
}
} else {
- action.setFragmentIndex(URLRewriteMediator.FULL_URI);
+ action.setFragmentIndex(URIFragments.FULL_URI);
}
if (type != null) {
- if (action.getFragmentIndex() == URLRewriteMediator.FULL_URI ||
- action.getFragmentIndex() == URLRewriteMediator.PORT) {
- handleException("type attribute is not allowed for 'port' and
'full URI' rewrites");
- }
-
if ("set".equals(type)) {
action.setActionType(RewriteAction.ACTION_SET);
} else if ("append".equals(type)) {
Modified:
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java?rev=989517&r1=989516&r2=989517&view=diff
==============================================================================
---
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java
(original)
+++
synapse/trunk/scratch/hiranya/urlrewrite/src/test/java/org/apache/synapse/mediators/URLRewriteTest.java
Thu Aug 26 08:04:58 2010
@@ -144,7 +144,7 @@ public class URLRewriteTest extends Test
RewriteRule r2 = new RewriteRule();
RewriteAction a2 = new RewriteAction();
a2.setValue("/services/TestService");
- a2.setFragmentIndex(URLRewriteMediator.PATH);
+ a2.setFragmentIndex(URIFragments.PATH);
r2.addRewriteAction(a2);
mediator.addRule(r2);
@@ -157,7 +157,7 @@ public class URLRewriteTest extends Test
RewriteAction a3 = new RewriteAction();
r3.setCondition(eval);
a3.setXpath(new SynapseXPath("get-property('prop1')"));
- a3.setFragmentIndex(URLRewriteMediator.REF);
+ a3.setFragmentIndex(URIFragments.REF);
r3.addRewriteAction(a3);
mediator.addRule(r3);