You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by sa...@apache.org on 2006/05/04 13:32:52 UTC
svn commit: r399670 - in
/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse:
./ api/ config/ mediators/ mediators/base/ mediators/builtin/
mediators/ext/ mediators/filters/ mediators/transform/
Author: saminda
Date: Thu May 4 04:32:21 2006
New Revision: 399670
URL: http://svn.apache.org/viewcvs?rev=399670&view=rev
Log:
Mainly fixes Javadocs and adds some more features...
Added:
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Util.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java
- copied, changed from r399252, incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/XSLTMediator.java
Removed:
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/ServiceMediatorFactory.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ServiceMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/XSLTMediator.java
Modified:
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Constants.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/HeaderType.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseContext.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseException.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseMessage.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/FilterMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/ListMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/Mediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/HeaderMediatorFactory.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/LogMediatorFactory.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/MediatorProperty.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java
incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Constants.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Constants.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Constants.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Constants.java Thu May 4 04:32:21 2006
@@ -17,18 +17,17 @@
import javax.xml.namespace.QName;
-
/**
* <p> Global constants for the Synapse project
*/
public interface Constants {
-
String CLASSMEDIATOR = "classmediator";
QName MEDIATE_OPERATION_NAME = new QName("mediate");
String MEDIATOR_RESPONSE_PROPERTY = "synapse.mediator.response";
+
String MEDIATOR_SYNAPSE_CTX_PROPERTY = "synapse.mediator.environment";
String ISRESPONSE_PROPERTY = "synapse.isresponse";
@@ -43,15 +42,12 @@
String ADD_ADDRESSING = "synapse.send.useaddressing";
// for security supporting
-
String SECURITY_QOS = "synapse_security";
+
String ADDRESSING_PROCESSED_CONFIGURATION_CONTEXT = "addressing_processed_configurationContext";
// addressing properites handling
-
String ENGAGE_ADDRESSING_IN_MESSAGE = "__ENGAGE_ADDRESSING_IN_MESSAGE__";
String ENGAGE_ADDRESSING_OUT_BOUND_MESSAGE = "__ENGAGE_ADDRESSING_OUT_BOUND_MESSAGE__";
-
-
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/HeaderType.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/HeaderType.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/HeaderType.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/HeaderType.java Thu May 4 04:32:21 2006
@@ -17,19 +17,29 @@
package org.apache.synapse;
import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axiom.soap.SOAPHeaderBlock;
/**
- * <p> This class encapsulates access to headers. It has a set of "logical names" (e.g. strings)
- * Once you have set the logical name you can read and write that header on a SynapseMessage
- * It is used by the RegexProcessor and the HeaderProcessor classes.
+ * This is a convenience class used to manipulate common headers. The convenience string names this defines could be
+ * used to configure the header mediator. Once an instance of this class exists, it could be given a value and
+ * a synapse message instance, and asked to set given value as the header value to the given message. i.e. setHeader()
+ *
+ * Support for additional headers may be added later
*/
public class HeaderType {
- private final static int TO = 1, FROM = 2, FAULT = 3, ACTION = 4,
- REPLYTO = 5;
+ private final static int TO = 1, FROM = 2, FAULT = 3, ACTION = 4, REPLYTO = 5;
- public final static String STRTO = "to", STRFROM = "from",
- STRFAULT = "faultto", STRACTION = "action", STRREPLYTO = "replyto";
+ /** Refers the To header */
+ public final static String STRTO = "To";
+ /** Refers the From header */
+ public final static String STRFROM = "From";
+ /** Refers the FaultTo header */
+ public final static String STRFAULT = "FaultTo";
+ /** Refers the Action header */
+ public final static String STRACTION = "Action";
+ /** Refers the ReplyTo header */
+ public final static String STRREPLYTO = "ReplyTo";
private int headerType = 0;
@@ -45,25 +55,7 @@
else if (header.equalsIgnoreCase(STRREPLYTO))
headerType = REPLYTO;
else
- throw new SynapseException("Unknown header : " + header);
- }
-
- public String getHeaderType() {
- switch (headerType) {
-
- case TO:
- return STRTO;
- case FROM:
- return STRFROM;
- case FAULT:
- return STRFAULT;
- case ACTION:
- return STRACTION;
- case REPLYTO:
- return STRREPLYTO;
-
- }
- return null;
+ throw new SynapseException("Unknown header type : " + header);
}
public String getHeader(SynapseMessage sm) {
@@ -98,7 +90,21 @@
return null;
}
- public void setHeader(SynapseMessage sm, String value) {
+ /**
+ * Removed the header indicated by this header type from the given message
+ * @param synMsg the current message from which the header should be removed
+ */
+ public void removeHeader(SynapseMessage synMsg) {
+ //TODO This is not yet implemented - revisit later
+ System.err.println("Unimplemented functionality - Needs to be fixed");
+ }
+
+ /**
+ * Sets the given value into the message's indicated header
+ * @param synMsg the current message on which to set the header
+ * @param value the value to be set
+ */
+ public void setHeader(SynapseMessage synMsg, String value) {
switch (headerType) {
case 0: {
throw new SynapseException(
@@ -107,22 +113,21 @@
case TO: {
- sm.setTo(new EndpointReference(value));
+ synMsg.setTo(new EndpointReference(value));
break;
}
case FROM: {
- sm.setFrom(new EndpointReference(value));
+ synMsg.setFrom(new EndpointReference(value));
break;
}
case REPLYTO: {
- sm.setReplyTo(new EndpointReference(value));
+ synMsg.setReplyTo(new EndpointReference(value));
break;
}
case ACTION: {
- sm.setWSAAction(value);
+ synMsg.setWSAAction(value);
break;
}
-
}
}
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseContext.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseContext.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseContext.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseContext.java Thu May 4 04:32:21 2006
@@ -20,34 +20,29 @@
/**
- * The Synapse Environment is available to mediators through the SynapseMessage. It
+ * The Synapse Context is available to mediators through the SynapseMessage. It
* allows one to call to the underlying SOAP engine (such as Axis2) where required.
* e.g. send message, get classloader etc. It also holds a reference to the current
* SynapseConfiguration.
*/
public interface SynapseContext {
- /*
- * This method injects a new message into the Synapse engine
- * It is used in a couple of ways. Firstly, this is how, for example,
- * Axis2 kicks messages into Synapse to start with.
- * <p>
- * Also mediators can use this to send messages that they want to be mediated by Synapse
- * <p>For example if you want to send a copy of a message somewhere, you can clone it and then
- * injectMessage()
- */
+ /**
+ * This method injects a new message into the Synapse engine. This is used by
+ * the underlying SOAP engine to inject messages into Synapse for mediation.
+ * e.g. The SynapseMessageReceiver used by Axis2 invokes this to inject new messages
+ */
public void injectMessage(SynapseMessage smc);
- /*
- * Mediators that wish to load classes should use the ClassLoader given here
+ /**
+ * Mediators may get access to the relevant classloader through this
*/
public ClassLoader getClassLoader();
/**
- * This method allows you send messages on. As opposed to injectMessage send message does not
- * process these through Synapse.
+ * This method allows a message to be sent through the underlying SOAP engine.
* <p/>
- * This will send request messages on, and send response messages back to the client
+ * This will send request messages on (forward), and send the response messages back to the client
*/
public void send(SynapseMessage smc);
@@ -59,7 +54,8 @@
public SynapseConfiguration getConfiguration();
/**
- * Set or replace the Synapse Configuration instance to be used
+ * Set or replace the Synapse Configuration instance to be used. May be used to
+ * programatically change the configuration at runtime etc.
*
* @param cfg The new synapse configuration instance
*/
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseException.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseException.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseException.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseException.java Thu May 4 04:32:21 2006
@@ -24,17 +24,14 @@
public SynapseException(String string) {
super(string);
-
}
public SynapseException(String msg, Throwable e) {
super(msg, e);
-
}
public SynapseException(Throwable t) {
super(t);
-
}
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseMessage.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseMessage.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseMessage.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/SynapseMessage.java Thu May 4 04:32:21 2006
@@ -22,7 +22,7 @@
import org.apache.axis2.addressing.RelatesTo;
/**
- * <p> The core definition of a message flowing thru Synapse.
+ * <p> This interface defines a message flowing through Synapse
* <p> The aim of this is to capture the Message Addressing Properties
* (aka Message Information Headers) and the SOAP Envelope.
* The core To/From/FaultTo/ReplyTo/MessageID/RelatesTo stuff is here. <p>
@@ -33,6 +33,19 @@
*/
public interface SynapseMessage {
+ /**
+ * Get the SOAP envelope of this message
+ * @return the SOAP envelope of the message
+ */
+ public SOAPEnvelope getEnvelope();
+
+ /**
+ * Sets the given envelope as the current SOAPEnvelope for this message
+ * @param envelope the envelope to be set
+ * @throws AxisFault on exception
+ */
+ public void setEnvelope(SOAPEnvelope envelope) throws AxisFault;
+
public EndpointReference getFaultTo();
public void setFaultTo(EndpointReference reference);
@@ -41,10 +54,6 @@
public void setFrom(EndpointReference reference);
- public SOAPEnvelope getEnvelope();
-
- public void setEnvelope(SOAPEnvelope envelope) throws AxisFault;
-
public String getMessageID();
public void setMessageID(String string);
@@ -61,37 +70,109 @@
public void setTo(EndpointReference reference);
+ /**
+ * Sets the WSAAction
+ * @param actionURI the WSAAction
+ */
public void setWSAAction(String actionURI);
+ /**
+ * Returns the WSAAction
+ * @return the WSAAction
+ */
public String getWSAAction();
+ /**
+ * Get the value of a custom property set on the message instance
+ * @param key key to look up property
+ * @return value for the given key
+ */
public Object getProperty(String key);
+ /**
+ * Set a custom property with the given name on the message instance
+ * @param key key to be used
+ * @param value value to be saved
+ */
public void setProperty(String key, Object value);
+ /**
+ * Returns the SOAPAction of the message
+ * @return the SOAPAction
+ */
public String getSoapAction();
+ /**
+ * Set the SOAPAction
+ * @param string the SOAP Action
+ */
public void setSoapAction(String string);
+ /**
+ * If this message using MTOM?
+ * @return true if using MTOM
+ */
public boolean isDoingMTOM();
+ /**
+ * Marks as using MTOM
+ * @param b true to mark as using MTOM
+ */
public void setDoingMTOM(boolean b);
+ /**
+ * Is this message over REST?
+ * @return true if over REST
+ */
public boolean isDoingREST();
+ /**
+ * Marks this message as over REST
+ * @param b true to mark as REST
+ */
public void setDoingREST(boolean b);
+ /**
+ * Is this message a SOAP 1.1 message?
+ * @return true if this is a SOAP 1.1 message
+ */
public boolean isSOAP11();
+ /**
+ * Mark this message as a response or not.
+ * @see org.apache.synapse.SynapseMessage#isResponse()
+ * @param b true to set this as a response
+ */
public void setResponse(boolean b);
+ /**
+ * Is this message a response to a synchronous message sent out through Synapse?
+ * @return true if this message is a response message
+ */
public boolean isResponse();
+ /**
+ * Marks this message as a fault response
+ * @see org.apache.synapse.SynapseMessage#isFaultResponse()
+ * @param b true to mark this as a fault response
+ */
public void setFaultResponse(boolean b);
+ /**
+ * Is this message a response to a fault message?
+ * @return true if this is a response to a fault message
+ */
public boolean isFaultResponse();
+ /**
+ * Return a reference to the SynapseContext
+ * @return the SynapseContext
+ */
public SynapseContext getSynapseContext();
+ /**
+ * Set the reference to the SynapseContext
+ * @param env the SynapseContext
+ */
public void setSynapseContext(SynapseContext env);
}
Added: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Util.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Util.java?rev=399670&view=auto
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Util.java (added)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/Util.java Thu May 4 04:32:21 2006
@@ -0,0 +1,70 @@
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed 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;
+
+import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.apache.axiom.om.impl.llom.OMElementImpl;
+import org.apache.axiom.om.impl.llom.OMTextImpl;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+import org.jaxen.JaxenException;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Holds utility methods used by Synapse
+ */
+public class Util {
+
+ private static final Log log = LogFactory.getLog(Util.class);
+
+ /**
+ * Evaluates the given XPath expression against the SOAPEnvelope of the
+ * current message and returns a String representation of the result
+ * @param xpath the expression to evaluate
+ * @param synMsg the source message which holds the SOAP envelope
+ * @return a String representation of the result of evaluation
+ */
+ public static String getStringValue(AXIOMXPath xpath, SynapseMessage synMsg) {
+
+ try {
+ Object result = xpath.evaluate(synMsg.getEnvelope());
+ StringBuffer textValue = new StringBuffer();
+
+ if (result instanceof List) {
+ Iterator iter = ((List) result).iterator();
+ while (iter.hasNext()) {
+ Object o = iter.next();
+ if (o instanceof OMTextImpl) {
+ textValue.append(((OMTextImpl) o).getText());
+ } else if (o instanceof OMElementImpl) {
+ textValue.append(((OMElementImpl) o).getText());
+ }
+ }
+ } else {
+ textValue.append(result.toString());
+ }
+ return textValue.toString();
+
+ } catch (JaxenException je) {
+ String msg = "Evaluation of the XPath expression " + xpath.toString() + " resulted in an error";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+ }
+
+}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/FilterMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/FilterMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/FilterMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/FilterMediator.java Thu May 4 04:32:21 2006
@@ -3,9 +3,18 @@
import org.apache.synapse.SynapseMessage;
/**
- * The filter mediator is a list mediator, which executes the given list of mediators
+ * The filter mediator is a list mediator, which executes the given (sub) list of mediators
* if the specified condition is satisfied
+ *
+ * @see FilterMediator#test(org.apache.synapse.SynapseMessage)
*/
public interface FilterMediator extends ListMediator {
+
+ /**
+ * Should return true if the sub/child mediators should execute. i.e. if the filter
+ * condition is satisfied
+ * @param sm the current message flowing through
+ * @return true if the configured filter condition evaluates to true
+ */
public boolean test(SynapseMessage sm);
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/ListMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/ListMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/ListMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/ListMediator.java Thu May 4 04:32:21 2006
@@ -22,13 +22,37 @@
*/
public interface ListMediator extends Mediator {
+ /**
+ * Appends the specified mediator to the end of this mediator's (children) list
+ * @param m the mediator to be added
+ * @return true (as per the general contract of the Collection.add method)
+ */
public boolean addChild(Mediator m);
+ /**
+ * Returns the mediator at the specified position
+ * @param pos index of mediator to return
+ * @return the mediator at the specified position in this list
+ */
public Mediator getChild(int pos);
+ /**
+ * Removes the first occurrence in this list of the specified mediator
+ * @param m mediator to be removed from this list, if present
+ * @return true if this list contained the specified mediator
+ */
public boolean removeChild(Mediator m);
+ /**
+ * Removes the mediator at the specified position in this list
+ * @param pos the index of the mediator to remove
+ * @return the mediator previously at the specified position
+ */
public Mediator removeChild(int pos);
+ /**
+ * Return the list of mediators of this List mediator instance
+ * @return the child/sub mediator list
+ */
public List getList();
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/Mediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/Mediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/Mediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/api/Mediator.java Thu May 4 04:32:21 2006
@@ -19,10 +19,25 @@
/**
* All Synapse mediators must implement this Mediator interface. As a message passes
- * through the synapse system, each mediator's mediate() method is invoked.
+ * through the synapse system, each mediator's mediate() method is invoked in the
+ * sequence/order defined in the SynapseConfiguration.
*/
public interface Mediator {
+
+ /**
+ * Invokes the mediator passing the current message for mediation. Each
+ * mediator performs its mediation action, and returns true if mediation
+ * should continue, or false if further mediation should be aborted.
+ *
+ * @param smc the current message for mediation
+ * @return true if further mediation should continue
+ */
public boolean mediate(SynapseMessage smc);
+ /**
+ * This is used for debugging purposes and exposes the type of the current
+ * mediator for logging and debugging purposes
+ * @return a String representation of the mediator type
+ */
public String getType();
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/HeaderMediatorFactory.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/HeaderMediatorFactory.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/HeaderMediatorFactory.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/HeaderMediatorFactory.java Thu May 4 04:32:21 2006
@@ -25,6 +25,8 @@
import org.apache.synapse.mediators.transform.HeaderMediator;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.jaxen.JaxenException;
/**
*
@@ -63,8 +65,16 @@
if (value != null && value.getAttributeValue() != null) {
headerMediator.setValue(value.getAttributeValue());
+
} else if (exprn != null && exprn.getAttributeValue() != null) {
- headerMediator.setExpression(exprn.getAttributeValue());
+ try {
+ headerMediator.setExpression(new AXIOMXPath(exprn.getAttributeValue()));
+ } catch (JaxenException je) {
+ String msg = "Invalid XPath expression : " + exprn.getAttributeValue();
+ log.error(msg);
+ throw new SynapseException(msg, je);
+ }
+
} else {
String msg = "Invalid attribute value for the attribute 'expression' or 'value'";
log.error(msg);
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/LogMediatorFactory.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/LogMediatorFactory.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/LogMediatorFactory.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/config/LogMediatorFactory.java Thu May 4 04:32:21 2006
@@ -25,6 +25,8 @@
import org.apache.synapse.mediators.MediatorProperty;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.jaxen.JaxenException;
import java.util.Iterator;
@@ -51,6 +53,7 @@
LogMediator logMediator = new LogMediator();
+ // Set the high level set of properties to be logged (i.e. log level)
OMAttribute level = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "level"));
if (level != null) {
if (SIMPLE.equals(level)) {
@@ -64,6 +67,13 @@
}
}
+ // check if a custom seperator has been supplied, if so use it
+ OMAttribute seperator = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "seperator"));
+ if (seperator != null) {
+ logMediator.setSeperator(seperator.getAttributeValue());
+ }
+
+ // parse custom properties and set them into the mediator
Iterator iter = elem.getChildrenWithName(new QName(Constants.NULL_NAMESPACE, "property"));
while (iter.hasNext()) {
@@ -93,12 +103,21 @@
}
} else if (attExpr != null) {
+
if (attExpr.getAttributeValue() == null || attExpr.getAttributeValue().trim().length() == 0) {
String msg = "Property attribute expression (if specified) is required for a Log property";
log.error(msg);
throw new SynapseException(msg);
+
} else {
- prop.setExpression(attValue.getAttributeValue());
+ try {
+ prop.setExpression(new AXIOMXPath(attExpr.getAttributeValue()));
+
+ } catch (JaxenException e) {
+ String msg = "Invalid XPapth expression : " + attExpr.getAttributeValue();
+ log.error(msg);
+ throw new SynapseException(msg, e);
+ }
}
} else {
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractListMediator.java Thu May 4 04:32:21 2006
@@ -24,6 +24,11 @@
import java.util.Iterator;
import java.util.List;
+/**
+ * This class implements the base functionality of a List mediator
+ *
+ * @see ListMediator
+ */
public abstract class AbstractListMediator extends AbstractMediator implements ListMediator {
protected List mediators = new ArrayList();
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java Thu May 4 04:32:21 2006
@@ -19,10 +19,18 @@
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.api.Mediator;
+/**
+ * This class is an abstract Mediator, that defines the logging and debugging
+ * elements of a mediator class.
+ */
public abstract class AbstractMediator implements Mediator {
protected final Log log = LogFactory.getLog(getClass());
+ /**
+ * Returns the class name of the mediator
+ * @return the class name of the mediator
+ */
public String getType() {
return getClass().getSimpleName();
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/MediatorProperty.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/MediatorProperty.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/MediatorProperty.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/MediatorProperty.java Thu May 4 04:32:21 2006
@@ -16,9 +16,17 @@
package org.apache.synapse.mediators;
import org.apache.synapse.config.Constants;
+import org.apache.synapse.Util;
+import org.apache.synapse.SynapseMessage;
+import org.apache.axiom.om.xpath.AXIOMXPath;
import javax.xml.namespace.QName;
+/**
+ * A mediator property is a name-value or name-expression pair which could be supplied
+ * for certain mediators. If expressions are supplied they are evaluated at the runtime
+ * against the current message into literal String values.
+ */
public class MediatorProperty {
public static final QName PROPERTY_Q = new QName(Constants.SYNAPSE_NAMESPACE, "property");
@@ -28,7 +36,7 @@
private String name;
private String value;
- private String expression;
+ private AXIOMXPath expression;
public MediatorProperty() {}
@@ -48,16 +56,16 @@
this.value = value;
}
- public String getExpression() {
+ public AXIOMXPath getExpression() {
return expression;
}
- public void setExpression(String expression) {
+ public void setExpression(AXIOMXPath expression) {
this.expression = expression;
}
- public String getEvaluatedExpression() {
- return expression; //TODO later use XPath xtention eval
+ public String getEvaluatedExpression(SynapseMessage synMsg) {
+ return Util.getStringValue(expression, synMsg);
}
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java Thu May 4 04:32:21 2006
@@ -31,7 +31,11 @@
/**
* If this mediator refers to another named Sequence, execute that. Else
- * execute the list of mediators (children) contained within this.
+ * execute the list of mediators (children) contained within this. If a referenced
+ * named sequence mediator instance cannot be found at runtime, an exception is
+ * thrown. This may occur due to invalid configuration of an erroneous runtime
+ * change of the synapse configuration. It is the responsibility of the
+ * SynapseConfiguration builder to ensure that dead references are not present.
*
* @param synMsg the synapse message
* @return as per standard mediator result
@@ -40,6 +44,7 @@
log.debug(getType() + " mediate()");
if (ref == null) {
return super.mediate(synMsg);
+
} else {
Mediator m = synMsg.getSynapseContext().getConfiguration().getNamedMediator(ref);
if (m == null) {
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SynapseMediator.java Thu May 4 04:32:21 2006
@@ -21,7 +21,11 @@
/**
* The SynapseMediator is the "mainmediator" of the synapse engine. It is
* given each message on arrival at the synapse engine. The synapse configuration
- * holds a reference to this special mediator instance.
+ * holds a reference to this special mediator instance. The SynapseMediator
+ * holds the list of mediators supplied within the <rules> element of an XML
+ * based Synapse configuration
+ *
+ * @see org.apache.synapse.config.SynapseConfiguration#getMainMediator()
*/
public class SynapseMediator extends AbstractListMediator {
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/DropMediator.java Thu May 4 04:32:21 2006
@@ -20,10 +20,15 @@
import org.apache.synapse.mediators.AbstractMediator;
/**
- * Halts further processing/mediation of the current message.
+ * Halts further processing/mediation of the current message. i.e. returns false
*/
public class DropMediator extends AbstractMediator {
+ /**
+ * Halts further mediation of the current message by returning false.
+ * @param synMsg the current message
+ * @return false always
+ */
public boolean mediate(SynapseMessage synMsg) {
log.debug(getType() + " mediate()");
if (synMsg.getTo() == null) {
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/LogMediator.java Thu May 4 04:32:21 2006
@@ -28,7 +28,10 @@
/**
* Logs the specified message into the configured logger. The log levels specify
- * which attributes would be logged, and is configurable.
+ * which attributes would be logged, and is configurable. Additionally custom
+ * properties may be defined to the logger, where literal values or expressions
+ * could be specified for logging. The custom properties are printed into the log
+ * using the defined seperator (\n, "," etc)
*/
public class LogMediator extends AbstractMediator {
@@ -41,6 +44,11 @@
private String SEP = ", ";
private List properties = new ArrayList();
+ /**
+ * Logs the current message according to the supplied semantics
+ * @param synMsg (current) message to be logged
+ * @return true always
+ */
public boolean mediate(SynapseMessage synMsg) {
log.debug(getType() + " mediate()");
log.info(getLogMessage(synMsg));
@@ -71,7 +79,7 @@
private String getSimpleLogMessage(SynapseMessage synMsg) {
StringBuffer sb = new StringBuffer();
if (synMsg.getTo() != null)
- sb.append(SEP + "To: " + synMsg.getTo().getAddress());
+ sb.append("To: " + synMsg.getTo().getAddress());
if (synMsg.getFrom() != null)
sb.append(SEP + "From: " + synMsg.getFrom().getAddress());
if (synMsg.getWSAAction() != null)
@@ -112,7 +120,7 @@
while (iter.hasNext()) {
MediatorProperty prop = (MediatorProperty) iter.next();
sb.append(SEP + prop.getName() + " = " +
- (prop.getValue() != null ? prop.getValue() : prop.getEvaluatedExpression()));
+ (prop.getValue() != null ? prop.getValue() : prop.getEvaluatedExpression(synMsg)));
}
}
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/SendMediator.java Thu May 4 04:32:21 2006
@@ -23,23 +23,23 @@
/**
* The Send mediator sends the message using the following semantics.
* <p/>
- * This is a leaf mediator (i.e. further processing does not continue after this is invoked)
+ * This is a leaf mediator (i.e. further processing halts after this mediator completes)
* <p/>
* TODO support endpoints, loadbalancing and failover
*/
public class SendMediator extends AbstractMediator {
/**
- * This is a leaf mediator. i.e. processing stops once send is invoked.
+ * This is a leaf mediator. i.e. processing stops once send is invoked,
+ * as it always returns false
*
- * @param synMsg
+ * @param synMsg the current message to be sent
* @return false always as this is a leaf mediator
*/
public boolean mediate(SynapseMessage synMsg) {
log.debug(getType() + " mediate()");
log.debug("Sending To: " + (synMsg.getTo() != null ? synMsg.getTo().getAddress() : "null"));
log.debug("Body : \n" + synMsg.getEnvelope());
- //synMsg.setProperty(Constants.ENGAGE_ADDRESSING_OUT_BOUND_MESSAGE, Boolean.TRUE);
synMsg.getSynapseContext().send(synMsg);
return false;
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java Thu May 4 04:32:21 2006
@@ -27,6 +27,7 @@
* This executes the "mediate" operation on a new instance of the specified class
* <p/>
* TODO add support for simple properties to be set
+ * TODO Requires refactoring and cleanup - revisit later
*/
public class ClassMediator extends AbstractMediator {
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java Thu May 4 04:32:21 2006
@@ -21,6 +21,7 @@
import org.apache.axiom.om.impl.llom.OMTextImpl;
import org.apache.axiom.om.impl.llom.OMElementImpl;
import org.apache.synapse.SynapseMessage;
+import org.apache.synapse.Util;
import org.apache.synapse.mediators.AbstractListMediator;
import org.jaxen.JaxenException;
@@ -28,7 +29,6 @@
import java.util.List;
import java.util.Iterator;
-
/**
* The filter mediator combines the regex and xpath filtering functionality. If an xpath
* is set, it is evaluated; else the given regex is evaluated against the source xpath.
@@ -39,6 +39,11 @@
private Pattern regex = null;
private AXIOMXPath xpath = null;
+ /**
+ * Executes the list of sub/child mediators, if the filter condition is satisfied
+ * @param synMsg the current message
+ * @return true if filter condition fails. else returns as per List mediator semantics
+ */
public boolean mediate(SynapseMessage synMsg) {
log.debug(getType() + " mediate()");
if (test(synMsg)) {
@@ -48,30 +53,21 @@
}
}
+ /**
+ * Tests the supplied condition after evaluation against the given XPath
+ * or Regex (against a source XPath). When a regular expression is supplied
+ * the source XPath is evaluated into a String value, and matched against
+ * the given regex
+ * @param synMsg the current message for evaluation of the test condition
+ * @return true if evaluation of the XPath/Regex results in true
+ */
public boolean test(SynapseMessage synMsg) {
try {
if (xpath != null) {
return xpath.booleanValueOf(synMsg.getEnvelope());
} else if (source != null && regex != null) {
-
- Object result = source.evaluate(synMsg.getEnvelope());
- String textValue = "";
-
- if (result instanceof List) {
- Iterator iter = ((List) result).iterator();
- while (iter.hasNext()) {
- Object o = iter.next();
- if (o instanceof OMTextImpl) {
- textValue += ((OMTextImpl) o).getText();
- } else if (o instanceof OMElementImpl) {
- textValue += ((OMElementImpl) o).getText();
- }
- }
- } else {
- textValue = result.toString();
- }
- return regex.matcher(textValue).matches();
+ return regex.matcher(Util.getStringValue(source, synMsg)).matches();
} else {
log.error("Invalid configuration specified");
@@ -109,6 +105,4 @@
this.xpath = xpath;
}
- //TODO name space addition support for xpath
- // i.e. xp.addNamespace(prefix, uri);
}
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java Thu May 4 04:32:21 2006
@@ -30,19 +30,20 @@
import javax.xml.namespace.QName;
/**
- * <p/> This returns a fault in response to this message
+ * This transforms the current message instance into a SOAP Fault message. If the
+ * original message was SOAP 1.1 the fault will also be SOAP 1.1 else, SOAP 1.2
+ *
+ * TODO this class needs more attention! - revisit later
*/
public class FaultMediator extends AbstractMediator {
- private Log log = LogFactory.getLog(getClass());
-
public static final int SOAP11 = 1;
public static final int SOAP12 = 2;
private int soapVersion;
-
private QName code;
private String reason;
+
//TODO support SOAP 1.2 fault stuff..
//Node, Role, detail etc
Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java?rev=399670&r1=399669&r2=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/HeaderMediator.java Thu May 4 04:32:21 2006
@@ -18,7 +18,18 @@
import org.apache.synapse.mediators.AbstractMediator;
import org.apache.synapse.SynapseMessage;
import org.apache.synapse.HeaderType;
+import org.apache.synapse.Util;
+import org.apache.axiom.om.xpath.AXIOMXPath;
+/**
+ * The header mediator is able to set a given value as a SOAP header, or remove a given
+ * header from the current message instance. This supports the headers currently
+ * supported by the HeaderType class. If an expression is supplied, its runtime value
+ * is evaluated using the current message. Unless the action is set to remove, the
+ * default behaviour of this mediator is to set a header value.
+ *
+ * @see HeaderType
+ */
public class HeaderMediator extends AbstractMediator {
public static final int ACTION_SET = 0;
@@ -28,16 +39,24 @@
private String value = null;
private int action = ACTION_SET;
- private String expression = null; //TODO handle this case later
+ private AXIOMXPath expression = null;
private HeaderType headerType = new HeaderType();
+ /**
+ * Sets/Removes a SOAP header on the current message
+ *
+ * @param synMsg the current message which is altered as necessary
+ * @return true always
+ */
public boolean mediate(SynapseMessage synMsg) {
log.debug(getType() + " mediate()");
+
if (action == ACTION_SET) {
- headerType.setHeader(synMsg, getValue());
- //TODO support exprns later
+ headerType.setHeader(synMsg,
+ (getValue() != null ? getValue() : Util.getStringValue(getExpression(), synMsg)));
+
} else {
- //TODO remove header later
+ headerType.removeHeader(synMsg);
}
return true;
}
@@ -67,11 +86,11 @@
this.value = value;
}
- public String getExpression() {
+ public AXIOMXPath getExpression() {
return expression;
}
- public void setExpression(String expression) {
+ public void setExpression(AXIOMXPath expression) {
this.expression = expression;
}
}
Copied: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java (from r399252, incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/XSLTMediator.java)
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java?p2=incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java&p1=incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/XSLTMediator.java&r1=399252&r2=399670&rev=399670&view=diff
==============================================================================
--- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/XSLTMediator.java (original)
+++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/TransformMediator.java Thu May 4 04:32:21 2006
@@ -22,23 +22,35 @@
import java.net.URL;
/**
- * @see org.apache.synapse.mediators.base.builtin.xslt.XSLTProcessorConfigurator
- * <p> This class is the class that transforms messages using XSLT.
+ * The transform mediator performs an XSLT or XQuery transformation requested, using
+ * the current message. The source attribute (if available) spcifies the source element
+ * on which the transformation would be applied. Additional properties passed into this
+ * mediator would become parameters (for XSLT) or variables (XQuery).
*/
-public class XSLTMediator extends AbstractMediator {
+public class TransformMediator extends AbstractMediator {
private URL xsltUrl = null;
private URL xqUrl = null;
private String source = null;
+ /**
+ * Transforms this message (or its element specified as the source) using the
+ * given XSLT or XQuery transformation
+ * @param synMsg the current message where the transformation will apply
+ * @return true always
+ */
public boolean mediate(SynapseMessage synMsg) {
log.debug(getType() + " mediate()");
+
if (xsltUrl != null) {
performXLST(synMsg);
return true;
+
} else if (xqUrl != null) {
- //TODO later
+ //TODO later revisit later
+ System.err.println("Unimplemented functionality..");
return true;
+
} else {
log.error("Invalid configuration - xslt/xq not specified");
return false;
@@ -47,39 +59,57 @@
private void performXLST(SynapseMessage synMsg) {
try {
+ // create a transformer
Transformer transformer = TransformerFactory.newInstance().newTransformer(
new StreamSource(xsltUrl.openStream()));
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- XMLStreamWriter xsWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(baos);
+ // create a byte array output stream and serialize the source node into it
+ ByteArrayOutputStream baosForSource = new ByteArrayOutputStream();
+ XMLStreamWriter xsWriterForSource = XMLOutputFactory.newInstance().createXMLStreamWriter(baosForSource);
AXIOMXPath xp = new AXIOMXPath(source);
- OMNode sourceNode = (OMNode) xp.evaluate(synMsg.getEnvelope());
- sourceNode.serialize(xsWriter);
+ Object result = xp.evaluate(synMsg.getEnvelope());
+ OMNode sourceNode = null;
- synMsg.getEnvelope().getBody().serialize(xsWriter);
+ if (result instanceof OMNode) {
+ sourceNode = (OMNode) result;
+ } else {
+ String msg = "XPath evaluation of the source element did not return an OMNode";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+ sourceNode.serialize(xsWriterForSource);
+ Source transformSrc = new StreamSource(new ByteArrayInputStream(baosForSource.toByteArray()));
+
+ // create a new Stream result over a new BAOS..
+ ByteArrayOutputStream baosForTarget = new ByteArrayOutputStream();
+ StreamResult transformTgt = new StreamResult(baosForTarget);
- Source transformSrc = new StreamSource(new ByteArrayInputStream(baos.toByteArray()));
- ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
- StreamResult transformTgt = new StreamResult(baos2);
+ // perform transformation
transformer.transform(transformSrc, transformTgt);
- StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(baos2.toByteArray()));
+ StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(baosForTarget.toByteArray()));
sourceNode.getParent().addChild(builder.getDocumentElement());
} catch (MalformedURLException mue) {
- throw new SynapseException(mue);
+ handleException(mue);
} catch (TransformerConfigurationException tce) {
- throw new SynapseException(tce);
+ handleException(tce);
} catch (XMLStreamException xse) {
- throw new SynapseException(xse);
+ handleException(xse);
} catch (JaxenException je) {
- throw new SynapseException(je);
+ handleException(je);
} catch (TransformerException te) {
- throw new SynapseException(te);
+ handleException(te);
} catch (IOException ioe) {
- throw new SynapseException(ioe);
+ handleException(ioe);
}
+ }
+
+ private void handleException(Exception e) {
+ String msg = "Error performing XSLT/XQ transformation " + e.getMessage();
+ log.error(msg);
+ throw new SynapseException(msg, e);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org