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