Added: 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=398818&view=auto ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java (added) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/AbstractMediator.java Mon May 1 22:59:02 2006 @@ -0,0 +1,29 @@ +/* +* 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.mediators; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.synapse.api.Mediator; + +public abstract class AbstractMediator implements Mediator { + + protected final Log log = LogFactory.getLog(getClass()); + + public String getName() { + return getClass().getName(); + } +}
Added: 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=398818&view=auto ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java (added) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/base/SequenceMediator.java Mon May 1 22:59:02 2006 @@ -0,0 +1,61 @@ +/* +* 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.mediators.base; + +import org.apache.synapse.SynapseMessage; +import org.apache.synapse.mediators.AbstractListMediator; + +/** + * The Sequence mediator either refers to another Sequence mediator instance + * or is a *Named* list/sequence of other (child) Mediators + */ +public class SequenceMediator extends AbstractListMediator { + + private String name = null; + private String ref = null; + + /** + * If this mediator refers to another named Sequence, execute that. Else + * execute the list of mediators (children) contained within this. + * + * @param synMsg the synapse message + * @return as per standard mediator result + */ + public boolean mediate(SynapseMessage synMsg) { + if (ref == null) { + return super.mediate(synMsg); + } else { + return synMsg.getSynapseEnvironment().getConfiguration(). + getNamedMediator(ref).mediate(synMsg); + } + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getRef() { + return ref; + } + + public void setRef(String ref) { + this.ref = ref; + } +} 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=398818&r1=398817&r2=398818&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 Mon May 1 22:59:02 2006 @@ -16,12 +16,12 @@ package org.apache.synapse.mediators.base; +import org.apache.synapse.mediators.AbstractListMediator; + /** - * - * - * This implements the main processor. Delegates to ListProcessor - * Here in case we need the main <synapse> to do anything special - * + * 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. */ 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=398818&r1=398817&r2=398818&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 Mon May 1 22:59:02 2006 @@ -16,20 +16,19 @@ package org.apache.synapse.mediators.builtin; -import org.apache.synapse.api.Mediator; - import org.apache.synapse.SynapseMessage; +import org.apache.synapse.mediators.AbstractMediator; /** - * Implementaion of <drop/> + * Halts further processing/mediation of the current message. */ -public class DropMediator implements Mediator { - - public boolean mediate(SynapseMessage sm) { - if (sm.getTo() == null) { +public class DropMediator extends AbstractMediator { + + public boolean mediate(SynapseMessage synMsg) { + if (synMsg.getTo() == null) { return false; - }else{ - sm.setTo(null); + } else { + synMsg.setTo(null); return false; } } Modified: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/HeaderMediator.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/HeaderMediator.java?rev=398818&r1=398817&r2=398818&view=diff ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/HeaderMediator.java (original) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/builtin/HeaderMediator.java Mon May 1 22:59:02 2006 @@ -19,43 +19,40 @@ import org.apache.synapse.HeaderType; import org.apache.synapse.SynapseMessage; - -import org.apache.synapse.api.Mediator; +import org.apache.synapse.mediators.AbstractMediator; /** - * - * @see org.apache.synapse.HeaderType - * <p> Sets aspects of the header to new values. - * Uses HeaderType to set header values - * + * @see org.apache.synapse.HeaderType + * <p> Sets aspects of the header to new values. + * Uses HeaderType to set header values */ -public class HeaderMediator implements Mediator{ - - private HeaderType headerType = new HeaderType(); - - private String value = null; - - public void setHeaderType(String ht) { - headerType.setHeaderType(ht); - } - - public String getHeaderType() { - return headerType.getHeaderType(); - } - - public boolean mediate(SynapseMessage sm) { - - headerType.setHeader(sm, getValue()); - return true; - } - - public void setValue(String value) { - this.value = value; - } - - public String getValue() { - return value; - } +public class HeaderMediator extends AbstractMediator { + + private HeaderType headerType = new HeaderType(); + + private String value = null; + + public void setHeaderType(String ht) { + headerType.setHeaderType(ht); + } + + public String getHeaderType() { + return headerType.getHeaderType(); + } + + public boolean mediate(SynapseMessage sm) { + + headerType.setHeader(sm, getValue()); + return true; + } + + public void setValue(String value) { + this.value = value; + } + + public String getValue() { + return value; + } } 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=398818&r1=398817&r2=398818&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 Mon May 1 22:59:02 2006 @@ -16,40 +16,135 @@ package org.apache.synapse.mediators.builtin; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - +import org.apache.axiom.soap.SOAPHeader; import org.apache.synapse.SynapseMessage; +import org.apache.synapse.mediators.AbstractMediator; -import org.apache.synapse.api.Mediator; +import java.util.Iterator; +import java.util.List; /** - * - * <p> - * Logs the message using commons logging - * - * <p> - * TODO make configurable - short or detailed logs - * + * Logs the specified message into the configured logger. The log levels specify + * which attributes would be logged, and is configurable. */ -public class LogMediator implements Mediator { - - private Log log = LogFactory.getLog(getClass()); - - public boolean mediate(SynapseMessage smc) { - log.info("---------------------------------------"); - if (smc.getTo() != null) - log.info("To: " + smc.getTo().getAddress()); - if (smc.getFrom() != null) - log.info("From: " + smc.getFrom().getAddress()); - if (smc.getReplyTo() != null) - log.info("ReplyTo: " + smc.getReplyTo().getAddress()); - if (smc.getEnvelope() != null) - log.info("Envelope: " + smc.getEnvelope().toString()); - log.info("---------------------------------------"); - return true; - } - +public class LogMediator extends AbstractMediator { + public static final int CUSTOM = 0; + public static final int SIMPLE = 1; + public static final int HEADERS = 2; + public static final int FULL = 3; + + private int logLevel = SIMPLE; + private String SEP = "\n"; + private List properties = null; + + public boolean mediate(SynapseMessage synMsg) { + log.info(getLogMessage(synMsg)); + return true; + } + + private String getLogMessage(SynapseMessage synMsg) { + switch (logLevel) { + case CUSTOM: + return getCustomLogMessage(synMsg); + case SIMPLE: + return getSimpleLogMessage(synMsg); + case HEADERS: + return getHeadersLogMessage(synMsg); + case FULL: + return getFullLogMessage(synMsg); + default: + return "Invalid log level specified"; + } + } + + private String getCustomLogMessage(SynapseMessage synMsg) { + StringBuffer sb = new StringBuffer(); + setCustomProperties(sb, synMsg); + return sb.toString(); + } + + private String getSimpleLogMessage(SynapseMessage synMsg) { + StringBuffer sb = new StringBuffer(); + if (synMsg.getTo() != null) + sb.append(SEP + "To: " + synMsg.getTo().getAddress()); + if (synMsg.getFrom() != null) + sb.append(SEP + "From: " + synMsg.getFrom().getAddress()); + if (synMsg.getWSAAction() != null) + sb.append(SEP + "WSAction: " + synMsg.getWSAAction()); + if (synMsg.getSoapAction() != null) + sb.append(SEP + "SOAPAction: " + synMsg.getSoapAction()); + if (synMsg.getReplyTo() != null) + sb.append(SEP + "ReplyTo: " + synMsg.getReplyTo().getAddress()); + if (synMsg.getMessageID() != null) + sb.append(SEP + "MessageID: " + synMsg.getMessageID()); + setCustomProperties(sb, synMsg); + return sb.toString(); + } + + private String getHeadersLogMessage(SynapseMessage synMsg) { + StringBuffer sb = new StringBuffer(); + Iterator iter = synMsg.getEnvelope().getHeader().examineAllHeaderBlocks(); + while (iter.hasNext()) { + SOAPHeader header = (SOAPHeader) iter.next(); + sb.append(SEP + header.getLocalName() + " : " + header.getText()); + } + setCustomProperties(sb, synMsg); + return sb.toString(); + } + + private String getFullLogMessage(SynapseMessage synMsg) { + StringBuffer sb = new StringBuffer(); + sb.append(getSimpleLogMessage(synMsg)); + if (synMsg.getEnvelope() != null) + sb.append(SEP + "Envelope: " + synMsg.getEnvelope()); + setCustomProperties(sb, synMsg); + return sb.toString(); + } + + private void setCustomProperties(StringBuffer sb, SynapseMessage synMsg) { + if (properties != null && !properties.isEmpty()) { + Iterator iter = properties.iterator(); + while (iter.hasNext()) { + Property prop = (Property) iter.next(); + sb.append(SEP + prop.getName() + " = " + + prop.getValue() != null ? prop.getValue() : prop.getEvaluatedExpression()); + } + } + } + + public class Property { + private String name; + private String value; + private String expression; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public String getEvaluatedExpression() { + return expression; //TODO later use XPath xtention eval + } + } } 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=398818&r1=398817&r2=398818&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 Mon May 1 22:59:02 2006 @@ -16,31 +16,27 @@ package org.apache.synapse.mediators.builtin; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.synapse.api.Mediator; import org.apache.synapse.SynapseMessage; +import org.apache.synapse.mediators.AbstractMediator; /** - * - * <p> - * - * This sends the message on (or back) - * + * 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) + * <p/> + * TODO support endpoints, loadbalancing and failover */ -public class SendMediator implements Mediator { - - - private Log log = LogFactory.getLog(getClass()); - - - public boolean mediate(SynapseMessage smc) { - log.debug("mediate"); - smc.getSynapseEnvironment().send(smc); - return false; - - } - - +public class SendMediator extends AbstractMediator { + /** + * This is a leaf mediator. i.e. processing stops once send is invoked. + * + * @param synMsg + * @return false always as this is a leaf mediator + */ + public boolean mediate(SynapseMessage synMsg) { + log.debug(getName() + " mediate()"); + synMsg.getSynapseEnvironment().send(synMsg); + return false; + } } Added: 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=398818&view=auto ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java (added) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ClassMediator.java Mon May 1 22:59:02 2006 @@ -0,0 +1,60 @@ +/* + * 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.mediators.ext; + + +import org.apache.synapse.SynapseException; +import org.apache.synapse.SynapseMessage; +import org.apache.synapse.api.Mediator; +import org.apache.synapse.mediators.AbstractMediator; + + +/** + * This executes the "mediate" operation on a new instance of the specified class + * <p/> + * TODO add support for simple properties to be set + */ +public class ClassMediator extends AbstractMediator { + + private Class clazz = null; + + + public boolean mediate(SynapseMessage smc) { + Mediator m = null; + + try { + m = (Mediator) getClazz().newInstance(); + } catch (Exception e) { + throw new SynapseException(e); + } + /*if (EnvironmentAware.class.isAssignableFrom(m.getClass())) { + ((EnvironmentAware) m).setSynapseEnvironment(se); + }*/ + return m.mediate(smc); + + } + + + public void setClazz(Class clazz) { + this.clazz = clazz; + } + + public Class getClazz() { + return clazz; + } + +} Added: incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ServiceMediator.java URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ServiceMediator.java?rev=398818&view=auto ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ServiceMediator.java (added) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/ext/ServiceMediator.java Mon May 1 22:59:02 2006 @@ -0,0 +1,104 @@ +/* + * 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.mediators.ext; + + +import org.apache.axis2.AxisFault; +import org.apache.axis2.context.*; +import org.apache.axis2.description.AxisOperation; +import org.apache.axis2.description.AxisService; +import org.apache.axis2.engine.AxisConfiguration; +import org.apache.axis2.engine.AxisEngine; +import org.apache.axis2.util.Utils; +import org.apache.synapse.Constants; +import org.apache.synapse.SynapseException; +import org.apache.synapse.SynapseMessage; +import org.apache.synapse.axis2.Axis2SynapseMessage; +import org.apache.synapse.mediators.AbstractMediator; + + +/** + * <p/> + * This class executes a service in the "owning" axis2 engine. + * The service operation will be "mediate" and the service name is set as the ServiceName property + */ +public class ServiceMediator extends AbstractMediator { + + + private String serviceName = null; + + public boolean mediate(SynapseMessage smc) { + MessageContext messageContext = null; + try { + messageContext = ((Axis2SynapseMessage) smc) + .getMessageContext(); + } catch (ClassCastException cce) { + throw new SynapseException( + "A non-Axis2 MC SOAPMessageContext has been passed to the Axis2 MediationExecutor", + cce); + } + + + try { + ConfigurationContext cc = messageContext.getConfigurationContext(); + AxisConfiguration ac = cc.getAxisConfiguration(); + AxisEngine ae = new AxisEngine(cc); + + AxisService as = null; + AxisOperation ao = null; + + as = ac.getService(getServiceName()); + if (as == null) + throw new SynapseException("cannot locate service " + + getServiceName()); + + ao = as.getOperation(Constants.MEDIATE_OPERATION_NAME); + OperationContext oc = OperationContextFactory + .createOperationContext(ao.getAxisSpecifMEPConstant(), ao); + ao.registerOperationContext(messageContext, oc); + + ServiceContext sc = Utils.fillContextInformation(as, cc); + oc.setParent(sc); + + messageContext.setOperationContext(oc); + messageContext.setServiceContext(sc); + + messageContext.setAxisOperation(ao); + messageContext.setAxisService(as); + + ae.receive(messageContext); + + } catch (AxisFault e) { + throw new SynapseException(e); + + } + + return ((Boolean) messageContext + .getProperty(Constants.MEDIATOR_RESPONSE_PROPERTY)) + .booleanValue(); + + } + + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + + public String getServiceName() { + return serviceName; + } + +} Added: 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=398818&view=auto ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java (added) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/filters/FilterMediator.java Mon May 1 22:59:02 2006 @@ -0,0 +1,95 @@ +/* + * 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.mediators.filters; + +import org.apache.axiom.om.xpath.AXIOMXPath; +import org.apache.synapse.SynapseMessage; +import org.apache.synapse.mediators.AbstractListMediator; +import org.jaxen.JaxenException; + +import java.util.regex.Pattern; + + +/** + * 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. + */ +public class FilterMediator extends AbstractListMediator { + + private String source = null; + private String regex = null; + private String xpath = null; + + public boolean mediate(SynapseMessage synMsg) { + if (test(synMsg)) { + return super.mediate(synMsg); + } else { + return true; + } + } + + public boolean test(SynapseMessage synMsg) { + try { + if (xpath != null) { + AXIOMXPath xp = new AXIOMXPath(xpath); + return xp.booleanValueOf(synMsg.getEnvelope()); + + } else if (source != null && regex != null) { + Pattern pattern = Pattern.compile(regex); + AXIOMXPath xp = new AXIOMXPath(source); + Object result = xp.evaluate(synMsg.getEnvelope()); + return pattern.matcher(result.toString()).matches(); + + } else { + log.error("Invalid configuration specified"); + return false; + } + + } catch (JaxenException e) { + log.error("XPath error : " + e.getMessage()); + return false; + } + } + + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getRegex() { + return regex; + } + + public void setRegex(String regex) { + this.regex = regex; + } + + public String getXpath() { + return xpath; + } + + public void setXpath(String xpath) { + this.xpath = xpath; + } + + //TODO name space addition support for xpath + // i.e. xp.addNamespace(prefix, uri); +} Added: 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=398818&view=auto ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java (added) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/FaultMediator.java Mon May 1 22:59:02 2006 @@ -0,0 +1,98 @@ +/* + * 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.mediators.transform; + +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMDocument; +import org.apache.axiom.soap.SOAP12Constants; +import org.apache.axiom.soap.SOAPEnvelope; +import org.apache.axiom.soap.SOAPFactory; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.synapse.SynapseException; +import org.apache.synapse.SynapseMessage; +import org.apache.synapse.mediators.AbstractMediator; + +import javax.xml.namespace.QName; + +/** + * <p/> This returns a fault in response to this message + */ +public class FaultMediator extends AbstractMediator { + + private Log log = LogFactory.getLog(getClass()); + + private QName faultCode; + private String reason; + + public boolean mediate(SynapseMessage smc) { + log.debug("process"); + + SOAPEnvelope envelop = smc.getEnvelope(); + SOAPFactory factory; + if (envelop != null) { + if (envelop.getNamespace().getName().equals( + SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI)) { + factory = OMAbstractFactory.getSOAP12Factory(); + } else { + factory = OMAbstractFactory.getSOAP11Factory(); + } + + } else { + factory = OMAbstractFactory.getSOAP11Factory(); + } + try { + // TODO : Figure out how to easily gen the correct fault + + // Replace this + OMDocument soapFaultDocument = factory.createOMDocument(); + SOAPEnvelope faultEnvelope = factory.getDefaultFaultEnvelope(); + soapFaultDocument.addChild(faultEnvelope); + + smc.setEnvelope(faultEnvelope); + } catch (Exception e) { + throw new SynapseException(e); + } + smc.setResponse(true); + + // Flipping the headers + EndpointReference tempEPR = smc.getTo(); + smc.setTo(smc.getReplyTo()); + smc.setReplyTo(tempEPR); + + smc.getSynapseEnvironment().injectMessage(smc); + + return false; + } + + public QName getFaultCode() { + return faultCode; + } + + public void setFaultCode(QName faultCode) { + this.faultCode = faultCode; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } +} Added: 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/XSLTMediator.java?rev=398818&view=auto ============================================================================== --- incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/XSLTMediator.java (added) +++ incubator/synapse/trunk/scratch/synapse2/modules/core/src/org/apache/synapse/mediators/transform/XSLTMediator.java Mon May 1 22:59:02 2006 @@ -0,0 +1,87 @@ +package org.apache.synapse.mediators.transform; + + +import org.apache.axiom.om.OMNode; +import org.apache.axiom.om.impl.builder.StAXOMBuilder; +import org.apache.axiom.om.xpath.AXIOMXPath; +import org.apache.synapse.SynapseException; +import org.apache.synapse.SynapseMessage; +import org.apache.synapse.mediators.AbstractMediator; +import org.jaxen.JaxenException; + +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; +import javax.xml.transform.*; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +/** + * @see org.apache.synapse.mediators.base.builtin.xslt.XSLTProcessorConfigurator + * <p> This class is the class that transforms messages using XSLT. + */ +public class XSLTMediator extends AbstractMediator { + + private URL xsltUrl = null; + private URL xqUrl = null; + private String source = null; + + public boolean mediate(SynapseMessage synMsg) { + + if (xsltUrl != null) { + performXLST(synMsg); + return true; + } else if (xqUrl != null) { + //TODO later + return true; + } else { + log.error("Invalid configuration - xslt/xq not specified"); + return false; + } + } + + private void performXLST(SynapseMessage synMsg) { + try { + Transformer transformer = TransformerFactory.newInstance().newTransformer( + new StreamSource(xsltUrl.openStream())); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + XMLStreamWriter xsWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(baos); + + AXIOMXPath xp = new AXIOMXPath(source); + OMNode sourceNode = (OMNode) xp.evaluate(synMsg.getEnvelope()); + sourceNode.serialize(xsWriter); + + synMsg.getEnvelope().getBody().serialize(xsWriter); + + Source transformSrc = new StreamSource(new ByteArrayInputStream(baos.toByteArray())); + ByteArrayOutputStream baos2 = new ByteArrayOutputStream(); + StreamResult transformTgt = new StreamResult(baos2); + transformer.transform(transformSrc, transformTgt); + + StAXOMBuilder builder = new StAXOMBuilder(new ByteArrayInputStream(baos2.toByteArray())); + sourceNode.getParent().addChild(builder.getDocumentElement()); + + } catch (MalformedURLException mue) { + throw new SynapseException(mue); + } catch (TransformerConfigurationException tce) { + throw new SynapseException(tce); + } catch (XMLStreamException xse) { + throw new SynapseException(xse); + } catch (JaxenException je) { + throw new SynapseException(je); + } catch (TransformerException te) { + throw new SynapseException(te); + } catch (IOException ioe) { + throw new SynapseException(ioe); + } + } + +} + + --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
