You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by da...@apache.org on 2006/10/30 11:24:17 UTC
svn commit: r469106 - in
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2:
engine/AxisEngine.java util/Utils.java
Author: davidillsley
Date: Mon Oct 30 02:24:16 2006
New Revision: 469106
URL: http://svn.apache.org/viewvc?view=rev&rev=469106
Log:
Refactoring response MessageContext creation to take account of lots of common code
I'm doing this in stages.
Part 2 - Modify existing methods to delegate to MessageContextBuilder class
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java?view=diff&rev=469106&r1=469105&r2=469106
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisEngine.java Mon Oct 30 02:24:16 2006
@@ -38,6 +38,7 @@
import org.apache.axis2.i18n.Messages;
import org.apache.axis2.transport.TransportSender;
import org.apache.axis2.util.JavaUtils;
+import org.apache.axis2.util.MessageContextBuilder;
import org.apache.axis2.util.UUIDGenerator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -134,340 +135,12 @@
* This method is called to handle any error that occurs at inflow or outflow. But if the
* method is called twice, it implies that sending the error handling has failed, in which case
* the method logs the error and exists.
- *
- * @param processingContext
- * @param e
- * @throws AxisFault
*/
public MessageContext createFaultMessageContext(MessageContext processingContext, Throwable e)
throws AxisFault {
- if (processingContext.isProcessingFault()) {
-
- // We get the error file processing the fault. nothing we can do
- throw new AxisFault(Messages.getMessage("errorwhileProcessingFault"));
- }
-
- MessageContext faultContext = new MessageContext();
- faultContext.setConfigurationContext(processingContext.getConfigurationContext());
- faultContext.setSessionContext(processingContext.getSessionContext());
- faultContext.setTransportIn(processingContext.getTransportIn());
- faultContext.setTransportOut(processingContext.getTransportOut());
-
- faultContext.setMessageID(UUIDGenerator.getUUID());
- faultContext.addRelatesTo(new RelatesTo(processingContext.getOptions().getMessageId()));
- faultContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
- processingContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING));
- faultContext.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
- processingContext.getProperty(AddressingConstants.WS_ADDRESSING_VERSION));
- faultContext.setProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES,
- processingContext.getProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES));
-
- // register the fault message context
- if (processingContext.getAxisOperation() != null && processingContext.getOperationContext() != null) {
- processingContext.getAxisOperation().addFaultMessageContext(faultContext, processingContext.getOperationContext());
- }
-
- ServiceContext serviceContext = processingContext.getServiceContext();
- if (serviceContext != null) {
- faultContext.setServiceContext(serviceContext);
- }
-
- faultContext.setOperationContext(processingContext.getOperationContext());
- faultContext.setProcessingFault(true);
- faultContext.setServerSide(true);
- faultContext.setDoingREST(processingContext.isDoingREST());
-
- faultContext.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
-
- // Add correct Action
- AxisOperation op = processingContext.getAxisOperation();
- if(op != null && op.getFaultAction()!=null){
- faultContext.setWSAAction(processingContext.getAxisOperation().getFaultAction());
- }
- else{ //If, for some reason there is no value set, should use a sensible action.
- faultContext.setWSAAction(Final.WSA_SOAP_FAULT_ACTION);
- }
-
- // there are some information that the fault thrower wants to pass to the fault path.
- // Means that the fault is a ws-addressing one hence use the ws-addressing fault action.
- Object faultInfoForHeaders = processingContext.getProperty(Constants.FAULT_INFORMATION_FOR_HEADERS);
- if (faultInfoForHeaders != null) {
- faultContext.setProperty(Constants.FAULT_INFORMATION_FOR_HEADERS, faultInfoForHeaders);
- faultContext.setWSAAction(Final.WSA_FAULT_ACTION);
- }
-
- // if the exception is due to a problem in the faultTo header itself, we can not use those
- // fault informatio to send the error. Try to send using replyTo, leave it to transport
- boolean doNotSendFaultUsingFaultTo = false;
- if (faultInfoForHeaders != null) {
- String problemHeaderName = (String) ((Map) faultInfoForHeaders).get(AddressingConstants.Final.FAULT_HEADER_PROB_HEADER_QNAME);
- doNotSendFaultUsingFaultTo = (problemHeaderName != null && (AddressingConstants.WSA_DEFAULT_PREFIX + ":" + AddressingConstants.WSA_FAULT_TO).equals(problemHeaderName));
- }
-
- EndpointReference faultTo = processingContext.getFaultTo();
- if (faultTo != null && !doNotSendFaultUsingFaultTo) {
- faultContext.setTo(faultTo);
- }
- else {
- faultContext.setTo(processingContext.getReplyTo());
- }
-
- // do Target Resolution
- faultContext.getConfigurationContext().getAxisConfiguration().getTargetResolverChain().resolveTarget(faultContext);
-
- //Determine that we have the correct transport available.
- TransportOutDescription transportOut = faultContext.getTransportOut();
-
- try {
- EndpointReference responseEPR = faultContext.getTo();
- if (faultContext.isServerSide() && responseEPR != null) {
- if (!responseEPR.hasAnonymousAddress() && !responseEPR.hasNoneAddress()) {
- URI uri = new URI(responseEPR.getAddress());
- String scheme = uri.getScheme();
- if (!transportOut.getName().getLocalPart().equals(scheme)) {
- ConfigurationContext configurationContext = faultContext.getConfigurationContext();
- transportOut = configurationContext.getAxisConfiguration()
- .getTransportOut(new QName(scheme));
- if (transportOut == null) {
- throw new AxisFault("Can not find the transport sender : " + scheme);
- }
- faultContext.setTransportOut(transportOut);
- }
- }
- }
- } catch (URISyntaxException urise) {
- throw new AxisFault(urise);
- }
-
- SOAPEnvelope envelope;
-
- if (processingContext.isSOAP11()) {
- envelope = OMAbstractFactory.getSOAP11Factory().getDefaultFaultEnvelope();
- } else {
-
- // Following will make SOAP 1.2 as the default, too.
- envelope = OMAbstractFactory.getSOAP12Factory().getDefaultFaultEnvelope();
- }
-
- extractFaultInformationFromMessageContext(processingContext, envelope.getBody().getFault(),
- e);
- faultContext.setEnvelope(envelope);
- faultContext.setProperty(MessageContext.TRANSPORT_OUT,
- processingContext.getProperty(MessageContext.TRANSPORT_OUT));
- faultContext.setProperty(Constants.OUT_TRANSPORT_INFO,
- processingContext.getProperty(Constants.OUT_TRANSPORT_INFO));
-
- return faultContext;
+ return MessageContextBuilder.createFaultMessageContext(processingContext, e);
}
-
- /**
- * Information to create the SOAPFault can be extracted from different places.
- * 1. Those information may have been put in to the message context by some handler. When someone
- * is putting like that, he must make sure the SOAPElements he is putting must be from the
- * correct SOAP Version.
- * 2. SOAPProcessingException is flexible enough to carry information about the fault. For example
- * it has an attribute to store the fault code. The fault reason can be extracted from the
- * message of the exception. I opted to put the stacktrace under the detail element.
- * eg : <Detail>
- * <Exception> stack trace goes here </Exception>
- * <Detail>
- * <p/>
- * If those information can not be extracted from any of the above places, I default the soap
- * fault values to following.
- * <Fault>
- * <Code>
- * <Value>env:Receiver</Value>
- * </Code>
- * <Reason>
- * <Text>unknown</Text>
- * </Reason>
- * <Role/>
- * <Node/>
- * <Detail/>
- * </Fault>
- * <p/>
- * -- EC
- *
- * @param context
- * @param fault
- * @param e
- */
- private void extractFaultInformationFromMessageContext(MessageContext context, SOAPFault fault,
- Throwable e) {
- SOAPProcessingException soapException = null;
- AxisFault axisFault = null;
-
- if (e != null) {
- if (e instanceof AxisFault) {
- axisFault = (AxisFault) e;
- } else if (e.getCause() instanceof AxisFault) {
- axisFault = (AxisFault) e.getCause();
- }
- }
-
- if (e instanceof SOAPProcessingException) {
- soapException = (SOAPProcessingException) e;
- } else if (axisFault != null) {
- if (axisFault.getCause() instanceof SOAPProcessingException) {
- soapException = (SOAPProcessingException) axisFault.getCause();
- }
- } else {
- // we have recd an instance of just the Exception class
- }
-
- // user can set the fault information to the message context or to the AxisFault itself.
- // whatever user sets to the message context, supercedes eerything.
-
- Object faultCode = context.getProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME);
- String soapFaultCode = "";
-
-
- if (faultCode != null) {
- fault.setCode((SOAPFaultCode) faultCode);
- } else if (soapException != null) {
- soapFaultCode = soapException.getFaultCode();
- } else if (axisFault != null) {
-
- Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME) != null) {
- fault.setCode((SOAPFaultCode) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME));
- } else {
- QName faultCodeQName = axisFault.getFaultCode();
- if (faultCodeQName != null) {
- if (faultCodeQName.getLocalPart().indexOf(":") == -1) {
- String prefix = faultCodeQName.getPrefix();
- String uri = faultCodeQName.getNamespaceURI();
- prefix = prefix == null || "".equals(prefix) ? Constants.AXIS2_NAMESPACE_PREFIX : prefix;
- uri = uri == null || "".equals(uri) ? Constants.AXIS2_NAMESPACE_URI : uri;
- soapFaultCode = prefix + ":" + faultCodeQName.getLocalPart();
- fault.declareNamespace(uri, prefix);
- } else {
- soapFaultCode = faultCodeQName.getLocalPart();
- }
- }
- }
- }
-
- // defaulting to fault code Sender, if no message is available
- if (faultCode == null && context.getEnvelope() != null) {
- soapFaultCode = ("".equals(soapFaultCode) || (soapFaultCode == null))
- ? getSenderFaultCode(context.getEnvelope().getNamespace())
- : soapFaultCode;
- fault.getCode().getValue().setText(soapFaultCode);
- }
-
- Object faultReason = context.getProperty(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME);
- String message = "";
-
- if (faultReason != null) {
- fault.setReason((SOAPFaultReason) faultReason);
- message = fault.getReason().getFirstSOAPText().getText();
- } else if (soapException != null) {
- message = soapException.getMessage();
- } else if (axisFault != null) {
- Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME) != null) {
- fault.setReason((SOAPFaultReason) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME));
- } else {
- message = axisFault.getReason();
- if (message == null || "".equals(message)) {
- message = getFaultReasonFromException(e, context);
- }
-// message = message != null && "".equals(message) ? message : e.getMessage();
- }
-
-
- }
-
- // defaulting to reason, unknown, if no reason is available
- if (faultReason == null) {
- message = ("".equals(message) || (message == null))
- ? "unknown"
- : message;
- fault.getReason().getFirstSOAPText().setLang("en-US");
- fault.getReason().getFirstSOAPText().setText(message);
- }
-
-
- Object faultRole = context.getProperty(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME);
- if (faultRole != null) {
- fault.getRole().setText((String) faultRole);
- } else if (axisFault != null) {
- Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME) != null) {
- fault.setRole((SOAPFaultRole) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_ROLE_LOCAL_NAME));
- }
- }
-
- Object faultNode = context.getProperty(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME);
- if (faultNode != null) {
- fault.getNode().setText((String) faultNode);
- } else if (axisFault != null) {
- Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME) != null) {
- fault.setNode((SOAPFaultNode) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_NODE_LOCAL_NAME));
- }
- }
-
- // Allow handlers to override the sendStacktraceDetailsWithFaults setting from the Configuration to allow
- // WS-* protocol faults to not include the exception.
- boolean sendStacktraceDetailsWithFaults = false;
- OperationContext oc = context.getOperationContext();
- Object flagFromContext = null;
- if(oc!=null){
- flagFromContext = context.getOperationContext().getProperty(Constants.Configuration.SEND_STACKTRACE_DETAILS_WITH_FAULTS);
- }
- if(flagFromContext!=null){
- sendStacktraceDetailsWithFaults = JavaUtils.isTrue(flagFromContext);
- }else{
- Parameter param = context.getParameter(Constants.Configuration.SEND_STACKTRACE_DETAILS_WITH_FAULTS);
- sendStacktraceDetailsWithFaults = JavaUtils.isTrue(param.getValue());
- }
-
- Object faultDetail = context.getProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME);
- if (faultDetail != null) {
- fault.setDetail((SOAPFaultDetail) faultDetail);
- } else if (axisFault != null) {
- Map faultElementsMap = axisFault.getFaultElements();
- if (faultElementsMap != null && faultElementsMap.get(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME) != null) {
- fault.setDetail((SOAPFaultDetail) faultElementsMap.get(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME));
- } else {
- OMElement detail = axisFault.getDetail();
- if (detail != null) {
- fault.getDetail().addDetailEntry(detail);
- } else if (sendStacktraceDetailsWithFaults) {
- fault.setException(axisFault);
- }
- }
- } else if (fault.getException() == null && sendStacktraceDetailsWithFaults) {
- if (e instanceof Exception) {
- fault.setException((Exception) e);
- } else {
- fault.setException(new Exception(e));
- }
- }
-
-
- }
-
- /**
- * By the time the exception comes here it can be wrapped by so many levels. This will crip down
- * to the root cause and get the initial error depending on the property
- *
- * @param e
- */
- private String getFaultReasonFromException(Throwable e, MessageContext context) {
- Throwable throwable = e;
- Parameter param = context.getParameter(Constants.Configuration.DRILL_DOWN_TO_ROOT_CAUSE_FOR_FAULT_REASON);
- boolean drillDownToRootCauseForFaultReason = param != null && ((String) param.getValue()).equalsIgnoreCase("true");
- if (drillDownToRootCauseForFaultReason) {
- while (throwable.getCause() != null) {
- throwable = throwable.getCause();
- }
- }
- return throwable.getMessage();
- }
-
+
/**
* This methods represents the inflow of the Axis, this could be either at the server side or the client side.
* Here the <code>ExecutionChain</code> is created using the Phases. The Handlers at the each Phases is ordered in
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java?view=diff&rev=469106&r1=469105&r2=469106
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Utils.java Mon Oct 30 02:24:16 2006
@@ -17,14 +17,29 @@
package org.apache.axis2.util;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.addressing.RelatesTo;
-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.ConfigurationContextFactory;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.ServiceContext;
+import org.apache.axis2.context.ServiceGroupContext;
+import org.apache.axis2.description.AxisModule;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.AxisServiceGroup;
+import org.apache.axis2.description.Flow;
+import org.apache.axis2.description.HandlerDescription;
+import org.apache.axis2.description.InOutAxisOperation;
+import org.apache.axis2.description.OutInAxisOperation;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.PhaseRule;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.engine.AxisError;
import org.apache.axis2.engine.Handler;
@@ -33,13 +48,6 @@
import org.apache.axis2.receivers.RawXMLINOutMessageReceiver;
import org.apache.axis2.wsdl.WSDLConstants;
-import javax.xml.namespace.QName;
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.Iterator;
-
public class Utils {
public static void addHandler(Flow flow, Handler handler, String phaseName) {
HandlerDescription handlerDesc = new HandlerDescription();
@@ -51,96 +59,13 @@
flow.addHandler(handlerDesc);
}
+ /**
+ * Replaced by MessageContextBuilder.createOutMessageContext()
+ */
public static MessageContext createOutMessageContext(MessageContext inMessageContext) throws AxisFault {
- MessageContext newmsgCtx = new MessageContext();
-
- newmsgCtx.setConfigurationContext(inMessageContext.getConfigurationContext());
- newmsgCtx.setSessionContext(inMessageContext.getSessionContext());
- newmsgCtx.setTransportIn(inMessageContext.getTransportIn());
- newmsgCtx.setTransportOut(inMessageContext.getTransportOut());
-
- Options oldOptions =
- inMessageContext.getOptions();
-
- newmsgCtx.setMessageID(UUIDGenerator.getUUID());
- newmsgCtx.setTo(oldOptions.getReplyTo());
- newmsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
- inMessageContext.getProperty(AddressingConstants.WS_ADDRESSING_VERSION));
- newmsgCtx.setProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES,
- inMessageContext.getProperty(AddressingConstants.DISABLE_ADDRESSING_FOR_OUT_MESSAGES));
-
- // do Target Resolution
- newmsgCtx.getConfigurationContext().getAxisConfiguration().getTargetResolverChain().resolveTarget(newmsgCtx);
-
- newmsgCtx.addRelatesTo(new RelatesTo(oldOptions.getMessageId()));
-
- AxisService axisService = inMessageContext.getAxisService();
- if (axisService != null && Constants.SCOPE_SOAP_SESSION.equals(axisService.getScope())) {
- newmsgCtx.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
- // add the service group id as a reference parameter
- String serviceGroupContextId = inMessageContext.getServiceGroupContextId();
- if (serviceGroupContextId != null && !"".equals(serviceGroupContextId)) {
- EndpointReference replyToEPR = newmsgCtx.getReplyTo();
- replyToEPR.addReferenceParameter(new QName(Constants.AXIS2_NAMESPACE_URI,
- Constants.SERVICE_GROUP_ID, Constants.AXIS2_NAMESPACE_PREFIX), serviceGroupContextId);
- }
- }
- else {
- newmsgCtx.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
- }
-
- AxisOperation ao = inMessageContext.getAxisOperation();
- if (ao.getOutputAction() != null) {
- newmsgCtx.setWSAAction(ao.getOutputAction());
- } else {
- newmsgCtx.setWSAAction(oldOptions.getAction());
- }
-
- newmsgCtx.setAxisMessage(ao.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE));
- newmsgCtx.setOperationContext(inMessageContext.getOperationContext());
- newmsgCtx.setServiceContext(inMessageContext.getServiceContext());
- newmsgCtx.setProperty(MessageContext.TRANSPORT_OUT,
- inMessageContext.getProperty(MessageContext.TRANSPORT_OUT));
- newmsgCtx.setProperty(Constants.OUT_TRANSPORT_INFO,
- inMessageContext.getProperty(Constants.OUT_TRANSPORT_INFO));
-
- // Setting the charater set encoding
- newmsgCtx.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
- inMessageContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING));
- newmsgCtx.setDoingREST(inMessageContext.isDoingREST());
- newmsgCtx.setDoingMTOM(inMessageContext.isDoingMTOM());
- newmsgCtx.setServerSide(inMessageContext.isServerSide());
- newmsgCtx.setServiceGroupContextId(inMessageContext.getServiceGroupContextId());
-
- // write the Message to the Wire
- TransportOutDescription transportOut = newmsgCtx.getTransportOut();
-
- //there may be instance where you want to send the response to replyTo
- //and this default behaviour should happen if somebody (e.g. a module) has not already provided
- //a Sender.
- try {
- EndpointReference responseEPR = newmsgCtx.getTo();
- if (newmsgCtx.isServerSide() && responseEPR != null) {
- if (!responseEPR.hasAnonymousAddress() && !responseEPR.hasNoneAddress()) {
- URI uri = new URI(responseEPR.getAddress());
- String scheme = uri.getScheme();
- if (!transportOut.getName().getLocalPart().equals(scheme)) {
- ConfigurationContext configurationContext = newmsgCtx.getConfigurationContext();
- transportOut = configurationContext.getAxisConfiguration()
- .getTransportOut(new QName(scheme));
- if (transportOut == null) {
- throw new AxisFault("Can not find the transport sender : " + scheme);
- }
- newmsgCtx.setTransportOut(transportOut);
- }
- }
- }
- } catch (URISyntaxException e) {
- throw new AxisFault(e);
- }
- return newmsgCtx;
+ return MessageContextBuilder.createOutMessageContext(inMessageContext);
}
-
+
public static AxisService createSimpleService(QName serviceName, String className, QName opName)
throws AxisFault {
return createSimpleService(serviceName, new RawXMLINOutMessageReceiver(), className,
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org