Author: asankha
Date: Thu Jan 4 04:13:35 2007
New Revision: 492540
URL: http://svn.apache.org/viewvc?view=rev&rev=492540
Log:
committing fix for http://issues.apache.org/jira/browse/SYNAPSE-49 from Tijs
with a minor update to RMSequenceMediator
Added:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorFactory.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorSerializer.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/RMSequenceMediator.java
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorFactoryFinder.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java?view=diff&rev=492540&r1=492539&r2=492540
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Constants.java
Thu Jan 4 04:13:35 2007
@@ -128,4 +128,17 @@
int TRACING_UNSET=2;
/** Tracing logger */
String TRACE_LOGGER ="TRACE_LOGGER";
+
+ // -- Synapse property values for WS-RM sequence handling --
+ /** WS-RM version 1.0*/
+ String SEQUENCE_VERSION_1_0 = "1.0";
+ /** WS-RM version 1.1*/
+ String SEQUENCE_VERSION_1_1 = "1.1";
+
+ /** Sandesha last message property name */
+ String SANDESHA_LAST_MESSAGE = "Sandesha2LastMessage";
+ /** Sandesha last sequence key property name */
+ String SANDESHA_SEQUENCE_KEY = "Sandesha2SequenceKey";
+ /** Sandesha WS-RM specification version property name */
+ String SANDESHA_SPEC_VERSION = "Sandesha2RMSpecVersion";
}
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java?view=diff&rev=492540&r1=492539&r2=492540
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/Constants.java
Thu Jan 4 04:13:35 2007
@@ -51,4 +51,10 @@
public static final String SCOPE_CORRELATE =
org.apache.synapse.Constants.SCOPE_CORRELATE;
/** The String value for an Axis2 messagecontext property */
public static final String SCOPE_AXIS2 =
org.apache.synapse.Constants.SCOPE_AXIS2;
+
+ // -- Synapse property values for WS-RM sequence handling --
+ /** The String value for a WS-RM version 1.0*/
+ public static final String SEQUENCE_VERSION_1_0 =
org.apache.synapse.Constants.SEQUENCE_VERSION_1_0;
+ /** The String value for a WS-RM version 1.1*/
+ public static final String SEQUENCE_VERSION_1_1 =
org.apache.synapse.Constants.SEQUENCE_VERSION_1_1;
}
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorFactoryFinder.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorFactoryFinder.java?view=diff&rev=492540&r1=492539&r2=492540
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorFactoryFinder.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MediatorFactoryFinder.java
Thu Jan 4 04:13:35 2007
@@ -62,6 +62,7 @@
InMediatorFactory.class,
OutMediatorFactory.class,
RMMediatorFactory.class,
+ RMSequenceMediatorFactory.class,
TryMediatorFactory.class,
ClassMediatorFactory.class
};
Added:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorFactory.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorFactory.java?view=auto&rev=492540
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorFactory.java
(added)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorFactory.java
Thu Jan 4 04:13:35 2007
@@ -0,0 +1,151 @@
+/*
+ * 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.config.xml;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.Mediator;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.mediators.builtin.RMSequenceMediator;
+import org.jaxen.JaxenException;
+
+/**
+ * Creates a RMSequence mediator through the supplied XML configuration
+ * <p/>
+ * <pre>
+ * <RMSequence (correlation="xpath" [last-message="xpath"]) | single="true"
[version="1.0|1.1"]/>
+ * </pre>
+ */
+public class RMSequenceMediatorFactory extends AbstractMediatorFactory {
+
+ private static final Log log = LogFactory.getLog(LogMediatorFactory.class);
+
+ private static final QName SEQUENCE_Q = new
QName(Constants.SYNAPSE_NAMESPACE, "RMSequence");
+
+ public Mediator createMediator(OMElement elem) {
+
+ RMSequenceMediator sequenceMediator = new RMSequenceMediator();
+ OMAttribute correlation =
+ elem.getAttribute(new QName(Constants.NULL_NAMESPACE,
"correlation"));
+ OMAttribute lastMessage =
+ elem.getAttribute(new QName(Constants.NULL_NAMESPACE,
"last-message"));
+ OMAttribute single = elem.getAttribute(new
QName(Constants.NULL_NAMESPACE, "single"));
+ OMAttribute version = elem.getAttribute(new
QName(Constants.NULL_NAMESPACE, "version"));
+
+ if (single == null && correlation == null) {
+ String msg = "The 'single' attribute value of true or a
'correlation' attribute is " +
+ "required for the configuration of a RMSequence mediator";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+
+ if (correlation != null) {
+ if (correlation.getAttributeValue() != null &&
+ correlation.getAttributeValue().trim().length() == 0) {
+ String msg = "Invalid attribute value specified for
correlation";
+ log.error(msg);
+ throw new SynapseException(msg);
+
+ } else {
+ try {
+ sequenceMediator.setCorrelation(new
AXIOMXPath(correlation.getAttributeValue()));
+ } catch (JaxenException e) {
+ String msg = "Invalid XPath expression for attribute
correlation : "
+ + correlation.getAttributeValue();
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+ }
+ OMElementUtils.addNameSpaces(sequenceMediator.getCorrelation(),
elem, log);
+ }
+
+ if (single != null) {
+
sequenceMediator.setSingle(Boolean.valueOf(single.getAttributeValue()));
+ }
+
+ if (sequenceMediator.isSingle() && sequenceMediator.getCorrelation()
!= null) {
+ String msg = "Invalid RMSequence mediator. A RMSequence can't have
both a "
+ + "single attribute value of true and a correlation attribute
specified.";
+ log.error(msg);
+ throw new SynapseException(msg);
+
+ } else if (!sequenceMediator.isSingle() &&
sequenceMediator.getCorrelation() == null) {
+ String msg = "Invalid RMSequence mediator. A RMSequence must have
a "
+ + "single attribute value of true or a correlation attribute
specified.";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+
+ if (lastMessage != null) {
+ if (lastMessage.getAttributeValue() != null &&
+ lastMessage.getAttributeValue().trim().length() == 0) {
+ String msg = "Invalid attribute value specified for
last-message";
+ log.error(msg);
+ throw new SynapseException(msg);
+
+ } else {
+ try {
+ sequenceMediator.setLastMessage(new
AXIOMXPath(lastMessage.getAttributeValue()));
+ } catch (JaxenException e) {
+ String msg = "Invalid XPath expression for attribute
last-message : "
+ + lastMessage.getAttributeValue();
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+ }
+ OMElementUtils.addNameSpaces(sequenceMediator.getLastMessage(),
elem, log);
+ }
+
+ if (sequenceMediator.isSingle() && sequenceMediator.getLastMessage()
!= null) {
+ String msg = "Invalid RMSequence mediator. A RMSequence can't have
both a "
+ + "single attribute value of true and a last-message attribute
specified.";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+
+ if (version != null) {
+ if
(!Constants.SEQUENCE_VERSION_1_0.equals(version.getAttributeValue()) &&
+
!Constants.SEQUENCE_VERSION_1_1.equals(version.getAttributeValue())) {
+ String msg = "Only '" + Constants.SEQUENCE_VERSION_1_0 + "' or
'" +
+ Constants.SEQUENCE_VERSION_1_1
+ + "' values are allowed for attribute version for a
RMSequence mediator"
+ + ", Unsupported version " + version.getAttributeValue();
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+ sequenceMediator.setVersion(version.getAttributeValue());
+ }
+
+ // after successfully creating the mediator
+ // set its common attributes such as tracing etc
+ initMediator(sequenceMediator, elem);
+
+ return sequenceMediator;
+ }
+
+ public QName getTagQName() {
+ return SEQUENCE_Q;
+ }
+}
Added:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorSerializer.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorSerializer.java?view=auto&rev=492540
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorSerializer.java
(added)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/RMSequenceMediatorSerializer.java
Thu Jan 4 04:13:35 2007
@@ -0,0 +1,93 @@
+/*
+ * 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.config.xml;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.Mediator;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.mediators.builtin.RMSequenceMediator;
+
+/**
+ * <pre>
+ * <RMSequence (correlation="xpath" [last-message="xpath"]) | single="true"
[version="1.0|1.1"]/>
+ * </pre>
+ */
+public class RMSequenceMediatorSerializer extends AbstractMediatorSerializer {
+
+ private static final Log log =
LogFactory.getLog(RMSequenceMediatorSerializer.class);
+
+ public OMElement serializeMediator(OMElement parent, Mediator m) {
+
+ if (!(m instanceof RMSequenceMediator)) {
+ handleException("Unsupported mediator passed in for serialization
: " + m.getType());
+ }
+
+ RMSequenceMediator mediator = (RMSequenceMediator) m;
+ OMElement sequence = fac.createOMElement("RMSequence", synNS);
+ finalizeSerialization(sequence, mediator);
+
+ if(mediator.isSingle() && mediator.getCorrelation() != null) {
+ handleException("Invalid RMSequence mediator. A RMSequence can't
have both a "
+ + "single attribute value of true and a correlation
attribute specified.");
+ }
+ if(mediator.isSingle() && mediator.getLastMessage() != null) {
+ handleException("Invalid RMSequence mediator. A RMSequence can't
have both a "
+ + "single attribute value of true and a last-message
attribute specified.");
+ }
+
+ if (mediator.isSingle()) {
+ sequence.addAttribute(fac.createOMAttribute("single", nullNS,
String.valueOf(mediator.isSingle())));
+ } else if (mediator.getCorrelation() != null) {
+ sequence.addAttribute(fac.createOMAttribute("correlation", nullNS,
+ mediator.getCorrelation().toString()));
+ super.serializeNamespaces(sequence, mediator.getCorrelation());
+ } else {
+ handleException("Invalid RMSequence mediator. Specify a single
message sequence "
+ + "or a correlation attribute.");
+ }
+
+ if (mediator.getLastMessage() != null) {
+ sequence.addAttribute(fac.createOMAttribute(
+ "last-message", nullNS, mediator.getLastMessage().toString()));
+ super.serializeNamespaces(sequence, mediator.getLastMessage());
+ }
+
+ if (mediator.getVersion() != null) {
+ sequence.addAttribute(fac.createOMAttribute("version", nullNS,
mediator.getVersion()));
+ }
+
+ if (parent != null) {
+ parent.addChild(sequence);
+ }
+ return sequence;
+ }
+
+ public String getMediatorClassName() {
+ return RMSequenceMediator.class.getName();
+ }
+
+ private void handleException(String msg) {
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+
+}
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java?view=diff&rev=492540&r1=492539&r2=492540
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
Thu Jan 4 04:13:35 2007
@@ -19,31 +19,37 @@
package org.apache.synapse.core.axis2;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPHeader;
import org.apache.axiom.soap.SOAPHeaderBlock;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.client.OperationClient;
import org.apache.axis2.client.Options;
-import org.apache.axis2.context.*;
-import org.apache.axis2.description.*;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.ServiceContext;
+import org.apache.axis2.context.ServiceGroupContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.AxisServiceGroup;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.util.UUIDGenerator;
import org.apache.axis2.util.Utils;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.Constants;
-import org.apache.synapse.SynapseException;
import org.apache.neethi.Policy;
import org.apache.neethi.PolicyEngine;
-
-import javax.xml.namespace.QName;
-import java.util.ArrayList;
-import java.util.Iterator;
+import org.apache.synapse.Constants;
+import org.apache.synapse.SynapseException;
/**
* This is a simple client that handles both in only and in out
@@ -114,7 +120,7 @@
org.apache.synapse.config.xml.Constants.SANDESHA_POLICY,
getPolicy(synapseOutMessageContext, wsRMPolicyKey));
}
-
+ copyRMOptions(originalInMsgCtx, clientOptions);
// always send each and every message in a new sequence and
terminate sequence
//clientOptions.setProperty("Sandesha2LastMessage", "true");
@@ -179,6 +185,22 @@
// set SOAP envelope on the message context, removing WS-A headers
newMC.setEnvelope(removeAddressingHeaders(ori));
return newMC;
+ }
+
+ private static void copyRMOptions(MessageContext oriContext, Options
targetOptions) {
+ Options oriOptions = oriContext.getOptions();
+ if(oriOptions.getProperty(Constants.SANDESHA_LAST_MESSAGE) != null) {
+ targetOptions.setProperty(Constants.SANDESHA_LAST_MESSAGE,
+ oriOptions.getProperty(Constants.SANDESHA_LAST_MESSAGE));
+ }
+ if(oriOptions.getProperty(Constants.SANDESHA_SPEC_VERSION) != null) {
+ targetOptions.setProperty(Constants.SANDESHA_SPEC_VERSION,
+ oriOptions.getProperty(Constants.SANDESHA_SPEC_VERSION));
+ }
+ if(oriOptions.getProperty(Constants.SANDESHA_SEQUENCE_KEY) != null) {
+ targetOptions.setProperty(Constants.SANDESHA_SEQUENCE_KEY,
+ oriOptions.getProperty(Constants.SANDESHA_SEQUENCE_KEY));
+ }
}
/**
Added:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/RMSequenceMediator.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/RMSequenceMediator.java?view=auto&rev=492540
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/RMSequenceMediator.java
(added)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/RMSequenceMediator.java
Thu Jan 4 04:13:35 2007
@@ -0,0 +1,208 @@
+package org.apache.synapse.mediators.builtin;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Collections;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.apache.axis2.util.UUIDGenerator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.Constants;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.config.Property;
+import org.apache.synapse.core.axis2.Axis2MessageContext;
+import org.apache.synapse.mediators.AbstractMediator;
+import org.jaxen.JaxenException;
+
+public class RMSequenceMediator extends AbstractMediator {
+
+ private static Log log = LogFactory.getLog(RMSequenceMediator.class);
+ private static final Log trace = LogFactory.getLog(Constants.TRACE_LOGGER);
+
+ private AXIOMXPath correlation = null;
+ private AXIOMXPath lastMessage = null;
+ private Boolean single;
+ private String version = null;
+
+ private static final String WSRM_SpecVersion_1_0 = "Spec_2005_02";
+ private static final String WSRM_SpecVersion_1_1 = "Spec_2006_08";
+ // set sequence expiry time to 5 minutes
+ private static final long SEQUENCE_EXPIRY_TIME = 300000;
+ private static Map sequenceMap = Collections.synchronizedMap(new
HashMap());
+
+ public boolean mediate(MessageContext smc) {
+ if (log.isDebugEnabled()) {
+ log.debug("RMSequence Mediator :: mediate() ");
+ }
+ boolean shouldTrace = shouldTrace(smc.getTracingState());
+ if (shouldTrace) {
+ trace.trace("Start : RMSequence mediator");
+ }
+ if (!(smc instanceof Axis2MessageContext)) {
+ if (log.isDebugEnabled()) {
+ log.debug("RMSequence Mediator :: only axis2 message context
is supported ");
+ }
+ return true;
+ }
+ Axis2MessageContext axis2MessageCtx = (Axis2MessageContext) smc;
+ org.apache.axis2.context.MessageContext orgMessageCtx =
+ axis2MessageCtx.getAxis2MessageContext();
+
+ cleanupSequenceMap();
+
+ String version = getVersionValue();
+ orgMessageCtx.getOptions().setProperty(
+ Constants.SANDESHA_SPEC_VERSION, version);
+ if (log.isDebugEnabled()) {
+ log.debug("using WS-RM version " + version);
+ }
+
+ if (isSingle()) {
+ String sequenceID = UUIDGenerator.getUUID();
+ orgMessageCtx.getOptions().setProperty(
+ Constants.SANDESHA_SEQUENCE_KEY, sequenceID);
+ orgMessageCtx.getOptions().setProperty(
+ Constants.SANDESHA_LAST_MESSAGE, "true");
+ return true;
+ }
+
+ String correlationValue = getCorrelationValue(smc);
+ if (log.isDebugEnabled()) {
+ log.debug("correlation value is " + correlationValue);
+ }
+
+ boolean lastMessage = isLastMessage(smc);
+ if (log.isDebugEnabled()) {
+ log.debug("Is this message the last message in sequence: " +
lastMessage);
+ }
+
+ String sequenceID = retrieveSequenceID(correlationValue);
+ orgMessageCtx.getOptions().setProperty(
+ Constants.SANDESHA_SEQUENCE_KEY, sequenceID);
+ if (log.isDebugEnabled()) {
+ log.debug("RMSequence Mediator :: using sequence " + sequenceID);
+ }
+
+ if (lastMessage) {
+ orgMessageCtx.getOptions().setProperty(
+ Constants.SANDESHA_LAST_MESSAGE, "true");
+ sequenceMap.remove(correlationValue);
+ }
+
+ if (shouldTrace) {
+ trace.trace("End : RMSequence mediator");
+ }
+ return true;
+ }
+
+ private String retrieveSequenceID(String correlationValue) {
+ String sequenceID = null;
+ if (!sequenceMap.containsKey(correlationValue)) {
+ sequenceID = UUIDGenerator.getUUID();
+ if (log.isDebugEnabled()) {
+ log.debug("setting sequenceID " + sequenceID + " for
correlation " + correlationValue);
+ }
+ Property sequenceProperty = new Property();
+ sequenceProperty.setValue(sequenceID);
+ sequenceProperty.setExpiryTime(System.currentTimeMillis() +
SEQUENCE_EXPIRY_TIME);
+ sequenceMap.put(correlationValue, sequenceProperty);
+ } else {
+ sequenceID = (String) ((Property)
sequenceMap.get(correlationValue)).getValue();
+ if (log.isDebugEnabled()) {
+ log.debug("got sequenceID " + sequenceID + " for correlation "
+ correlationValue);
+ }
+ }
+ return sequenceID;
+ }
+
+ private String getCorrelationValue(MessageContext smc) {
+ OMElement node = null;
+ try {
+ node = (OMElement)
getCorrelation().selectSingleNode(smc.getEnvelope());
+ } catch (JaxenException e) {
+ log.error("XPath error : " + e.getMessage());
+ throw new SynapseException("XPath error : " + e.getMessage());
+ }
+ if (node == null) {
+ log.debug("XPath expression did not return any node");
+ throw new SynapseException("XPath expression did not return any
node");
+ }
+ return node.getText();
+ }
+
+ private String getVersionValue() {
+ if (Constants.SEQUENCE_VERSION_1_1.equals(getVersion())) {
+ return WSRM_SpecVersion_1_1;
+ } else {
+ return WSRM_SpecVersion_1_0;
+ }
+ }
+
+ private boolean isLastMessage(MessageContext smc) {
+ if (getLastMessage() == null) {
+ return false;
+ }
+ try {
+ return getLastMessage().booleanValueOf(smc.getEnvelope());
+ } catch (JaxenException e) {
+ log.error("XPath error : " + e.getMessage());
+ throw new SynapseException("XPath error : " + e.getMessage());
+ }
+ }
+
+ private synchronized void cleanupSequenceMap() {
+ Iterator itKey = sequenceMap.keySet().iterator();
+ while (itKey.hasNext()) {
+ Object key = itKey.next();
+ Property sequenceProperty = (Property) sequenceMap.get(key);
+ if (sequenceProperty.isExpired()) {
+ sequenceMap.remove(key);
+ }
+ }
+ }
+
+ public boolean isSingle() {
+ if (getSingle() != null && getSingle().booleanValue()) {
+ return true;
+
+ } else {
+ return false;
+ }
+ }
+
+ public AXIOMXPath getCorrelation() {
+ return correlation;
+ }
+
+ public void setCorrelation(AXIOMXPath correlation) {
+ this.correlation = correlation;
+ }
+
+ public AXIOMXPath getLastMessage() {
+ return lastMessage;
+ }
+
+ public void setLastMessage(AXIOMXPath lastMessage) {
+ this.lastMessage = lastMessage;
+ }
+
+ public Boolean getSingle() {
+ return single;
+ }
+
+ public void setSingle(Boolean single) {
+ this.single = single;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]