You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by as...@apache.org on 2006/10/12 13:11:13 UTC
svn commit: r463193 - in /incubator/synapse/branches/NIO: ./
modules/core/src/org/apache/synapse/core/axis2/
modules/niohttp/src/org/apache/axis2/transport/niohttp/
modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/ repository/conf/
Author: asankha
Date: Thu Oct 12 04:11:12 2006
New Revision: 463193
URL: http://svn.apache.org/viewvc?view=rev&rev=463193
Log:
made a copy
Added:
incubator/synapse/branches/NIO/
- copied from r462896, incubator/synapse/trunk/java/
Modified:
incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/DynamicAxisOperation.java
incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/Axis2CallbackImpl.java
incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpListener.java
incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpSender.java
incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/HttpMessage.java
incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/ReadHandler.java
incubator/synapse/branches/NIO/repository/conf/axis2.xml
Modified: incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java (original)
+++ incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java Thu Oct 12 04:11:12 2006
@@ -140,39 +140,9 @@
serviceCtx, clientOptions);
mepClient.addMessageContext(axisOutMsgCtx);
- if (clientOptions.isUseSeparateListener()) {
- mepClient.setCallback(new AsyncCallback(synapseOutMessageContext));
- axisOutMsgCtx.getOperationContext().setProperty(
- org.apache.axis2.Constants.RESPONSE_WRITTEN, "SKIP");
- mepClient.execute(false);
- return null;
-
- } else {
-
- mepClient.execute(true);
-
- MessageContext response = mepClient.getMessageContext(
- WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-
- // set properties on response
- response.setServerSide(true);
- response.setProperty(Constants.ISRESPONSE_PROPERTY, Boolean.TRUE);
- response.setProperty(MessageContext.TRANSPORT_OUT,
- axisOutMsgCtx.getProperty(MessageContext.TRANSPORT_OUT));
- response.setProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO,
- axisOutMsgCtx.getProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO));
- response.setProperty(
- org.apache.synapse.Constants.PROCESSED_MUST_UNDERSTAND,
- axisOutMsgCtx.getProperty(
- org.apache.synapse.Constants.PROCESSED_MUST_UNDERSTAND));
- response.setTransportIn(axisOutMsgCtx.getTransportIn());
- response.setTransportOut(savedTransportOut);
-
- // If request is REST assume that the response is REST too
- response.setDoingREST(axisOutMsgCtx.isDoingREST());
-
- return response;
- }
+ mepClient.setCallback(new AsyncCallback(synapseOutMessageContext));
+ mepClient.execute(false);
+ return null;
}
/**
Modified: incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/DynamicAxisOperation.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/DynamicAxisOperation.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/DynamicAxisOperation.java (original)
+++ incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/DynamicAxisOperation.java Thu Oct 12 04:11:12 2006
@@ -247,7 +247,17 @@
// Options object reused so soapAction needs to be removed so
// that soapAction+wsa:Action on response don't conflict
options.setAction("");
+
} else {
+
+ SynapseCallbackReceiver callbackReceiver = (SynapseCallbackReceiver) axisOp.getMessageReceiver();
+ callbackReceiver.addCallback(mc.getMessageID(), callback);
+ AxisEngine engine = new AxisEngine(cc);
+ mc.getConfigurationContext().registerOperationContext(mc.getMessageID(), oc);
+ engine.send(mc);
+
+ }
+ /*} else {
if (block) {
// Send the SOAP Message and receive a response
MessageContext response = send(mc);
@@ -267,7 +277,7 @@
sc.getConfigurationContext().getThreadPool().execute(
new NonBlockingInvocationWorker(callback, mc));
}
- }
+ }*/
}
private void addReferenceParameters(MessageContext msgctx) {
Modified: incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java (original)
+++ incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java Thu Oct 12 04:11:12 2006
@@ -121,19 +121,6 @@
log.debug("Using default 'main' mediator for message mediation");
synCtx.getEnvironment().injectMessage(synCtx);
}
-
- // Response handling mechanism for 200/202 and 5XX
- // if smc.isResponse = true then the response will be handled with 200 OK
- // else, response will be 202 OK without an http body
- // if smc.isFaultRespose = true then the response is a fault with 500 Internal Server Error
-
- if (synCtx.isResponse()) {
- mc.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
- }
- if (synCtx.isFaultResponse()) {
- // todo: is there a better way to inject faultSoapEnv to the Axis2 Transport
- throw new AxisFault("Synapse Encountered an Error - See Log for More Details");
- }
}
/**
Modified: incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java (original)
+++ incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java Thu Oct 12 04:11:12 2006
@@ -21,10 +21,12 @@
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.addressing.RelatesTo;
import org.apache.axis2.AxisFault;
+import org.apache.synapse.Constants;
import java.util.Map;
import java.util.HashMap;
import java.util.Collections;
+import java.util.Iterator;
public class SynapseCallbackReceiver implements MessageReceiver {
Modified: incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseMessageReceiver.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseMessageReceiver.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseMessageReceiver.java (original)
+++ incubator/synapse/branches/NIO/modules/core/src/org/apache/synapse/core/axis2/SynapseMessageReceiver.java Thu Oct 12 04:11:12 2006
@@ -42,18 +42,5 @@
MessageContext synCtx = Axis2MessageContextFinder.getSynapseMessageContext(mc);
synCtx.getEnvironment().injectMessage(synCtx);
-
- // Response handling mechanism for 200/202 and 5XX
- // if smc.isResponse = true then the response will be handled with 200 OK
- // else, response will be 202 OK without an http body
- // if smc.isFaultRespose = true then the response is a fault with 500 Internal Server Error
-
- if (synCtx.isResponse()) {
- mc.getOperationContext().setProperty(Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
- }
- if (synCtx.isFaultResponse()) {
- // todo: is there a better way to inject faultSoapEnv to the Axis2 Transport
- throw new AxisFault("Synapse Encountered an Error - See Log for More Details");
- }
}
}
Modified: incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/Axis2CallbackImpl.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/Axis2CallbackImpl.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/Axis2CallbackImpl.java (original)
+++ incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/Axis2CallbackImpl.java Thu Oct 12 04:11:12 2006
@@ -19,16 +19,24 @@
import org.apache.axis2.transport.niohttp.impl.HttpRequest;
import org.apache.axis2.transport.niohttp.impl.HttpResponse;
import org.apache.axis2.transport.niohttp.impl.Callback;
+import org.apache.axis2.transport.TransportUtils;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.RelatesTo;
+import org.apache.axis2.engine.AxisEngine;
+import org.apache.axiom.soap.SOAPEnvelope;
public class Axis2CallbackImpl implements Callback {
+ /** The HttpRequest for which we received this HttpResponse */
private HttpRequest request;
+ /** The HttpResponse to be handled */
private HttpResponse response;
- private MessageContext msgCtx;
+ /** The original Axis2 MessageContext (request) */
+ private MessageContext outMsgCtx;
public Axis2CallbackImpl(HttpRequest request, MessageContext msgCtx) {
this.request = request;
- this.msgCtx = msgCtx;
+ this.outMsgCtx = msgCtx;
}
public HttpRequest getRequest() {
@@ -47,16 +55,46 @@
this.response = response;
}
- public MessageContext getMsgCtx() {
- return msgCtx;
+ public MessageContext getOutMsgCtx() {
+ return outMsgCtx;
}
- public void setMsgCtx(MessageContext msgCtx) {
- this.msgCtx = msgCtx;
+ public void setOutMsgCtx(MessageContext outMsgCtx) {
+ this.outMsgCtx = outMsgCtx;
}
public void run() {
- System.out.println("Reponse received for HttpRequest : " + request +
- "\nAxis message :" + msgCtx.getEnvelope());
+
+ outMsgCtx.getOperationContext().getAxisOperation();
+
+ MessageContext responseMsgCtx = new MessageContext();
+ //responseMsgCtx.setOptions(outMsgCtx.getOptions()); // this is called a hack.. why?
+ // Options object reused above so soapAction needs to be removed so
+ // that soapAction+wsa:Action on response don't conflict
+ responseMsgCtx.setSoapAction("");
+ responseMsgCtx.setServerSide(true);
+ responseMsgCtx.setDoingREST(outMsgCtx.isDoingREST());
+ responseMsgCtx.setProperty(MessageContext.TRANSPORT_IN, outMsgCtx
+ .getProperty(MessageContext.TRANSPORT_IN));
+ responseMsgCtx.setTransportIn(outMsgCtx.getTransportIn());
+ responseMsgCtx.setTransportOut(outMsgCtx.getTransportOut());
+
+ responseMsgCtx.setOperationContext(outMsgCtx.getOperationContext());
+ responseMsgCtx.setConfigurationContext(outMsgCtx.getConfigurationContext());
+ responseMsgCtx.getOptions().setRelationships(
+ new RelatesTo[] { new RelatesTo(outMsgCtx.getMessageID()) });
+ responseMsgCtx.setTo(null);
+
+ try {
+ SOAPEnvelope resenvelope = TransportUtils.createSOAPMessage(
+ responseMsgCtx,
+ response.getInputStream(),
+ outMsgCtx.getEnvelope().getNamespace().getNamespaceURI());
+ responseMsgCtx.setEnvelope(resenvelope);
+ AxisEngine engine = new AxisEngine(outMsgCtx.getConfigurationContext());
+ engine.receive(responseMsgCtx);
+ } catch (AxisFault af) {
+ af.printStackTrace();
+ }
}
}
Modified: incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpListener.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpListener.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpListener.java (original)
+++ incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpListener.java Thu Oct 12 04:11:12 2006
@@ -134,14 +134,19 @@
log.debug("@@@@ Got new HTTP request : " + request.toStringLine());
MessageContext msgContext = new MessageContext();
+ msgContext.setConfigurationContext(cfgCtx);
msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTP);
- try {
- TransportOutDescription transportOut = cfgCtx.getAxisConfiguration()
- .getTransportOut(new QName(Constants.TRANSPORT_HTTP));
- TransportInDescription transportIn = cfgCtx.getAxisConfiguration()
- .getTransportIn(new QName(Constants.TRANSPORT_HTTP));
+ msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
+ msgContext.setServerSide(true);
+ msgContext.setProperty(Constants.Configuration.TRANSPORT_IN_URL, request.getPath());
+ msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, request.getHeaders());
+ msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, request);
- msgContext.setConfigurationContext(cfgCtx);
+ try {
+ msgContext.setTransportOut(cfgCtx.getAxisConfiguration()
+ .getTransportOut(new QName(Constants.TRANSPORT_HTTP)));
+ msgContext.setTransportIn(cfgCtx.getAxisConfiguration()
+ .getTransportIn(new QName(Constants.TRANSPORT_HTTP)));
/* TODO session handling
String sessionKey = request.getSession(true).getId();
@@ -149,16 +154,6 @@
SessionContext sessionContext = sessionManager.getSessionContext(sessionKey);
msgContext.setSessionContext(sessionContext);
}*/
-
- msgContext.setTransportIn(transportIn);
- msgContext.setTransportOut(transportOut);
- msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
- msgContext.setServerSide(true);
- msgContext.setProperty(Constants.Configuration.TRANSPORT_IN_URL, request.getPath());
-
- msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, request.getHeaders());
- msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, request);
-
workerPool.execute(new Worker(cfgCtx, msgContext, request));
} catch (AxisFault e) {
@@ -194,8 +189,11 @@
public void handleResponse(HttpResponse response, Runnable callback) {
log.debug("@@@@ Got new HTTP response : " + response.toStringLine());
- //callback.setResponse(response);
- callback.run();
+ if (callback instanceof Axis2CallbackImpl) {
+ Axis2CallbackImpl cb = (Axis2CallbackImpl) callback;
+ cb.setResponse(response);
+ cb.run();
+ }
}
}
Modified: incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpSender.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpSender.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpSender.java (original)
+++ incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/NHttpSender.java Thu Oct 12 04:11:12 2006
@@ -86,17 +86,11 @@
// TODO
}
populateHttpMessage(req, msgContext, format, dataOut);
-
- Axis2CallbackImpl cb = new Axis2CallbackImpl(req, msgContext);
- reactor.send(req, cb);
+ reactor.send(req, new Axis2CallbackImpl(req, msgContext));
} else {
// TODO
}
-
- //new CommonsHTTPTransportSender().writeMessageWithCommons(
- // msgContext, epr, dataOut, format);
-
} else {
// TODO handle
}
@@ -107,18 +101,13 @@
instanceof HttpRequest) {
sendAsyncResponse(msgContext, format, dataOut);
} else {
- sendUsingOutputStream(msgContext, format, dataOut);
+ // TODO handle
}
} else {
throw new AxisFault("Both message 'TO' and Property MessageContext.TRANSPORT_OUT" +
" is Null, Do not know where to send");
}
}
-
- if (msgContext.getOperationContext() != null) {
- msgContext.getOperationContext().setProperty(
- Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
- }
}
private OMOutputFormat getOMOutputFormat(MessageContext msgContext) {
@@ -185,50 +174,6 @@
} catch (Exception e) {
throw new AxisFault(e);
}
- }
-
- private void sendUsingOutputStream(MessageContext msgContext,
- OMOutputFormat format,
- OMElement dataOut) throws AxisFault {
- OutputStream out =
- (OutputStream) msgContext
- .getProperty(MessageContext.TRANSPORT_OUT);
-
- if (msgContext.isServerSide()) {
- OutTransportInfo transportInfo =
- (OutTransportInfo) msgContext
- .getProperty(Constants.OUT_TRANSPORT_INFO);
-
- if (transportInfo != null) {
- String contentType;
-
- Object contentTypeObject = msgContext.getProperty(Constants.Configuration.CONTENT_TYPE);
- if (contentTypeObject != null) {
- contentType = (String) contentTypeObject;
- } else if (msgContext.isDoingREST()) {
- contentType = HTTPConstants.MEDIA_TYPE_APPLICATION_XML;
- } else {
- contentType = format.getContentType();
- format.setSOAP11(msgContext.isSOAP11());
- }
-
-
- String encoding = contentType + "; charset="
- + format.getCharSetEncoding();
-
- transportInfo.setContentType(encoding);
- } else {
- throw new AxisFault(Constants.OUT_TRANSPORT_INFO +
- " has not been set");
- }
- }
-
- format.setDoOptimize(msgContext.isDoingMTOM());
- try {
- dataOut.serializeAndConsume(out, format);
- } catch (XMLStreamException e) {
- throw new AxisFault(e);
- }
}
public void cleanup(MessageContext msgContext) throws AxisFault {
Modified: incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/HttpMessage.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/HttpMessage.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/HttpMessage.java (original)
+++ incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/HttpMessage.java Thu Oct 12 04:11:12 2006
@@ -213,9 +213,9 @@
sb.append(Constants.CRLF);
if (buffer.limit() > 0) {
+ buffer.position(bodyStart);
ByteBuffer bodyBuf = buffer;
if (bodyStart > 0) {
- buffer.position(bodyStart);
bodyBuf = buffer.slice();
}
Modified: incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/ReadHandler.java
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/ReadHandler.java?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/ReadHandler.java (original)
+++ incubator/synapse/branches/NIO/modules/niohttp/src/org/apache/axis2/transport/niohttp/impl/ReadHandler.java Thu Oct 12 04:11:12 2006
@@ -131,7 +131,8 @@
return processIncomingMessage();
} catch (IOException e) {
- log.warn("Unexpected error reading from socket. Closing connection : " + e.getMessage());
+ log.warn("Unexpected error reading from socket: " + socket +
+ " Closing connection : " + e.getMessage());
try {
socket.close();
} catch (IOException e1) {
Modified: incubator/synapse/branches/NIO/repository/conf/axis2.xml
URL: http://svn.apache.org/viewvc/incubator/synapse/branches/NIO/repository/conf/axis2.xml?view=diff&rev=463193&r1=462896&r2=463193
==============================================================================
--- incubator/synapse/branches/NIO/repository/conf/axis2.xml (original)
+++ incubator/synapse/branches/NIO/repository/conf/axis2.xml Thu Oct 12 04:11:12 2006
@@ -83,7 +83,8 @@
<!-- ================================================= -->
<!-- Transport Ins -->
<!-- ================================================= -->
- <transportReceiver name="http" class="org.apache.axis2.transport.nhttp.AsyncHTTPListener"/>
+ <!--<transportReceiver name="http" class="org.apache.axis2.transport.nhttp.AsyncHTTPListener"/>-->
+ <transportReceiver name="http" class="org.apache.axis2.transport.niohttp.NHttpListener"/>
<!--<transportReceiver name="http"
class="org.apache.axis2.transport.http.SimpleHTTPServer">
<parameter name="port" locked="false">6060</parameter>-->
@@ -180,8 +181,10 @@
class="org.apache.axis2.transport.local.LocalTransportSender"/>
<!--<transportSender name="http"
class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">-->
+ <!--<transportSender name="http"
+ class="org.apache.axis2.transport.nhttp.AsyncHTTPSender">-->
<transportSender name="http"
- class="org.apache.axis2.transport.nhttp.AsyncHTTPSender">
+ class="org.apache.axis2.transport.niohttp.NHttpSender">
<parameter name="PROTOCOL" locked="false">HTTP/1.1</parameter>
<!--<parameter name="Transfer-Encoding" locked="false">chunked</parameter>-->
</transportSender>
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org