Author: veithen
Date: Fri Mar 20 10:30:50 2009
New Revision: 756406

URL: http://svn.apache.org/viewvc?rev=756406&view=rev
Log:
Added experimental mediator implementations that allow to store part of the 
message in a property (without converting it to string) and to insert an OM 
node from a property into the message, as suggested in SYNAPSE-503.

Added:
    
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediator.java
   (with props)
    
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediatorFactory.java
   (with props)
    
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediator.java
   (with props)
    
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediatorFactory.java
   (with props)
    synapse/trunk/java/modules/experimental/src/main/resources/
    synapse/trunk/java/modules/experimental/src/main/resources/META-INF/
    
synapse/trunk/java/modules/experimental/src/main/resources/META-INF/services/
    
synapse/trunk/java/modules/experimental/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory

Added: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediator.java?rev=756406&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediator.java
 (added)
+++ 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediator.java
 Fri Mar 20 10:30:50 2009
@@ -0,0 +1,56 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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.experimental;
+
+import org.apache.axiom.om.OMNode;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseLog;
+import org.apache.synapse.mediators.AbstractMediator;
+import org.apache.synapse.util.xpath.SourceXPathSupport;
+import org.apache.synapse.util.xpath.SynapseXPath;
+
+public class DetachMediator extends AbstractMediator {
+    private final SourceXPathSupport source = new SourceXPathSupport();
+    private String property;
+
+    public boolean mediate(MessageContext synCtx) {
+        SynapseLog synLog = getLog(synCtx);
+        OMNode node = source.selectOMNode(synCtx, synLog);
+        node.detach();
+        synCtx.setProperty(property, node);
+        return true;
+    }
+    
+    public SynapseXPath getSource() {
+        return source.getXPath();
+    }
+
+    public void setSource(SynapseXPath source) {
+        this.source.setXPath(source);
+    }
+
+    public String getProperty() {
+        return property;
+    }
+
+    public void setProperty(String property) {
+        this.property = property;
+    }
+}

Propchange: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediatorFactory.java?rev=756406&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediatorFactory.java
 (added)
+++ 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediatorFactory.java
 Fri Mar 20 10:30:50 2009
@@ -0,0 +1,63 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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.experimental;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.config.xml.AbstractMediatorFactory;
+import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.util.xpath.SynapseXPath;
+import org.jaxen.JaxenException;
+
+public class DetachMediatorFactory extends AbstractMediatorFactory {
+    private static final QName TAG_NAME
+                = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "detach");
+    private static final QName ATT_PROPERTY = new QName("property");
+
+    public QName getTagQName() {
+        return TAG_NAME;
+    }
+
+    public DetachMediator createMediator(OMElement elem) {
+        DetachMediator mediator = new DetachMediator();
+
+        OMAttribute attSource = elem.getAttribute(ATT_SOURCE);
+        OMAttribute attProperty = elem.getAttribute(ATT_PROPERTY);
+        
+        if (attSource != null) {
+            try {
+                mediator.setSource(new SynapseXPath(attSource));
+            } catch (JaxenException e) {
+                handleException("Invalid XPath specified for the source 
attribute : " +
+                    attSource.getAttributeValue());
+            }
+        }
+        
+        if (attProperty != null) {
+            mediator.setProperty(attProperty.getAttributeValue());
+        } else {
+            handleException("The 'property' attribute is required for the 
detach mediator");
+        }
+        
+        return mediator;
+    }
+}

Propchange: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/DetachMediatorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediator.java?rev=756406&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediator.java
 (added)
+++ 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediator.java
 Fri Mar 20 10:30:50 2009
@@ -0,0 +1,58 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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.experimental;
+
+import org.apache.axiom.om.OMNode;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseLog;
+import org.apache.synapse.mediators.AbstractMediator;
+import org.apache.synapse.util.xpath.SourceXPathSupport;
+import org.apache.synapse.util.xpath.SynapseXPath;
+
+public class ReplaceMediator extends AbstractMediator {
+    private final SourceXPathSupport target = new SourceXPathSupport();
+    private String property;
+
+    public boolean mediate(MessageContext synCtx) {
+        SynapseLog synLog = getLog(synCtx);
+        OMNode replacement = (OMNode)synCtx.getProperty(property);
+        OMNode node = target.selectOMNode(synCtx, synLog);
+        node.insertSiblingAfter(replacement);
+        node.detach();
+        synCtx.setProperty(property, null);
+        return true;
+    }
+    
+    public SynapseXPath getTarget() {
+        return target.getXPath();
+    }
+
+    public void setTarget(SynapseXPath source) {
+        this.target.setXPath(source);
+    }
+
+    public String getProperty() {
+        return property;
+    }
+
+    public void setProperty(String property) {
+        this.property = property;
+    }
+}

Propchange: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediatorFactory.java?rev=756406&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediatorFactory.java
 (added)
+++ 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediatorFactory.java
 Fri Mar 20 10:30:50 2009
@@ -0,0 +1,63 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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.experimental;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.config.xml.AbstractMediatorFactory;
+import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.util.xpath.SynapseXPath;
+import org.jaxen.JaxenException;
+
+public class ReplaceMediatorFactory extends AbstractMediatorFactory {
+    private static final QName TAG_NAME
+            = new QName(XMLConfigConstants.SYNAPSE_NAMESPACE, "replace");
+    private static final QName ATT_PROPERTY = new QName("property");
+
+    public QName getTagQName() {
+        return TAG_NAME;
+    }
+
+    public ReplaceMediator createMediator(OMElement elem) {
+        ReplaceMediator mediator = new ReplaceMediator();
+
+        OMAttribute attTarget = elem.getAttribute(ATT_TARGET);
+        OMAttribute attProperty = elem.getAttribute(ATT_PROPERTY);
+        
+        if (attTarget != null) {
+            try {
+                mediator.setTarget(new SynapseXPath(attTarget));
+            } catch (JaxenException e) {
+                handleException("Invalid XPath specified for the target 
attribute : " +
+                    attTarget.getAttributeValue());
+            }
+        }
+        
+        if (attProperty != null) {
+            mediator.setProperty(attProperty.getAttributeValue());
+        } else {
+            handleException("The 'property' attribute is required for the 
replace mediator");
+        }
+        
+        return mediator;
+    }
+}

Propchange: 
synapse/trunk/java/modules/experimental/src/main/java/org/apache/synapse/experimental/ReplaceMediatorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
synapse/trunk/java/modules/experimental/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/experimental/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory?rev=756406&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/experimental/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
 (added)
+++ 
synapse/trunk/java/modules/experimental/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
 Fri Mar 20 10:30:50 2009
@@ -0,0 +1,2 @@
+org.apache.synapse.experimental.DetachMediatorFactory
+org.apache.synapse.experimental.ReplaceMediatorFactory


Reply via email to