ws-ews-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From d...@apache.org
Subject svn commit: r153276 - in webservices/ews/trunk/src/org/apache/geronimo/ews: jaxrpcmapping/ ws4j2ee/toWs/ws/
Date Thu, 10 Feb 2005 17:09:12 GMT
Author: dims
Date: Thu Feb 10 09:09:09 2005
New Revision: 153276

URL: http://svn.apache.org/viewcvs?view=rev&rev=153276
Log:
fixes from jonas team

Modified:
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeBindingWriter.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeEmitter.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeFaultWriter.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeGeneratorFactory.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeStubWriter.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/JaxRpcMapper.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/WsdlToJ2ee.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/XMLBeansJaxRpcMapper.java
    webservices/ews/trunk/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeBindingWriter.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeBindingWriter.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeBindingWriter.java
(original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeBindingWriter.java
Thu Feb 10 09:09:09 2005
@@ -15,16 +15,16 @@
  */
 package org.apache.geronimo.ews.jaxrpcmapping;
 
+import java.io.IOException;
+import javax.wsdl.Binding;
 import org.apache.axis.utils.Messages;
 import org.apache.axis.wsdl.gen.Generator;
 import org.apache.axis.wsdl.symbolTable.BindingEntry;
 import org.apache.axis.wsdl.symbolTable.PortTypeEntry;
 import org.apache.axis.wsdl.symbolTable.SymbolTable;
+import org.apache.axis.wsdl.toJava.JavaStubWriter;
 import org.apache.axis.wsdl.toJava.Utils;
 
-import javax.wsdl.Binding;
-import java.io.IOException;
-
 /**
  * This is Wsdl2java's Binding Writer.  It writes the following files, as appropriate:
  * <bindingName>Stub.java, <bindingName>Skeleton.java, <bindingName>Impl.java.
@@ -80,7 +80,7 @@
     protected Generator getJavaStubWriter(J2eeEmitter emitter,
                                           BindingEntry bEntry,
                                           SymbolTable st) {
-        return new J2eeStubWriter(emitter, bEntry, st);
+        return new JavaStubWriter(emitter, bEntry, st);
     }
 
     /**
@@ -103,7 +103,7 @@
 //		}else{
 //			return new J2eeImplWriter(emitter, bEntry, st);		
 //		}
-        return new J2eeImplWriter(emitter, bEntry, st);
+        return null;//new J2eeImplWriter(emitter, bEntry, st);
     }
 
     /**

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeEmitter.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeEmitter.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeEmitter.java (original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeEmitter.java Thu Feb
10 09:09:09 2005
@@ -97,6 +97,7 @@
         } else {
             jaxRpcMapper.loadMappingFromDir(mappingFilePath);
         }
+        setNowrap(!jaxRpcMapper.hasWrappedElement());
         int length = jaxRpcMapper.getPackageMappingCount();
         Map namespaceMap = getNamespaceMap();
         for (int i = 0; i < length; i++) {

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeFaultWriter.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeFaultWriter.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeFaultWriter.java (original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeFaultWriter.java Thu
Feb 10 09:09:09 2005
@@ -16,7 +16,7 @@
 
 package org.apache.geronimo.ews.jaxrpcmapping;
 
-import org.apache.axis.enum.Use;
+import org.apache.axis.constants.Use;
 import org.apache.axis.wsdl.symbolTable.FaultInfo;
 import org.apache.axis.wsdl.symbolTable.Parameter;
 import org.apache.axis.wsdl.symbolTable.SymbolTable;

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeGeneratorFactory.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeGeneratorFactory.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeGeneratorFactory.java
(original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeGeneratorFactory.java
Thu Feb 10 09:09:09 2005
@@ -21,8 +21,27 @@
  *
  */
 
-import org.apache.axis.encoding.DefaultTypeMappingImpl;
-import org.apache.axis.encoding.TypeMapping;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.wsdl.Binding;
+import javax.wsdl.Definition;
+import javax.wsdl.Fault;
+import javax.wsdl.Message;
+import javax.wsdl.Operation;
+import javax.wsdl.OperationType;
+import javax.wsdl.Port;
+import javax.wsdl.PortType;
+import javax.wsdl.Service;
+import javax.xml.namespace.QName;
+import javax.xml.rpc.holders.BooleanHolder;
+
 import org.apache.axis.utils.JavaUtils;
 import org.apache.axis.utils.Messages;
 import org.apache.axis.wsdl.gen.Generator;
@@ -54,26 +73,6 @@
 import org.apache.axis.wsdl.toJava.JavaUndeployWriter;
 import org.apache.axis.wsdl.toJava.Utils;
 
-import javax.wsdl.Binding;
-import javax.wsdl.Definition;
-import javax.wsdl.Fault;
-import javax.wsdl.Message;
-import javax.wsdl.Operation;
-import javax.wsdl.OperationType;
-import javax.wsdl.Port;
-import javax.wsdl.PortType;
-import javax.wsdl.Service;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.holders.BooleanHolder;
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Vector;
-
 /**
  * This is WsdlToJ2ee's implementation of the GeneratorFactory
  *
@@ -215,7 +214,7 @@
     /**
      * Return Wsdl2java's JavaTypeWriter object.
      */
-    private Writers typeWriters = new Writers();
+    protected Writers typeWriters = new Writers();
 
     public Generator getGenerator(TypeEntry type, SymbolTable symbolTable) {
         Generator writer = new JavaTypeWriter(emitter, type, symbolTable);
@@ -336,7 +335,7 @@
      * Refactored to call recursively for JAX-RPC 1.1 spec 4.2.5.
      */
     protected int javifyTypeEntryName(SymbolTable symbolTable, TypeEntry entry, HashMap anonQNames,
int uniqueNum) {
-        TypeEntry tEntry = (TypeEntry) entry;
+        TypeEntry tEntry = entry;
         String dims = tEntry.getDimensions();
         TypeEntry refType = tEntry.getRefType();
         while (refType != null) {
@@ -388,8 +387,12 @@
             // In case of <xsd:list itemType="...">, 
             // set typeQName to the value of the itemType attribute.
             QName itemType = SchemaUtils.getListItemType(tEntry.getNode());
+            boolean isArray = false;
             if (itemType != null) {
                 typeQName = itemType;
+                // OW Guillaume Change
+                // found a list
+                isArray = true;
             }
             if (typeQName.getLocalPart().
                     indexOf(SymbolTable.ANON_TOKEN) >= 0) {
@@ -398,13 +401,7 @@
                 // unique qnames for anonymous types.
                 // Only consider the localName after the last '>'
                 // when generating the java name
-                // String localName = typeQName.getLocalPart();
-                // localName =
-                // localName.substring(
-                // localName.lastIndexOf(
-                // SymbolTable.ANON_TOKEN)+1);
-                // typeQName = new QName(typeQName.getNamespaceURI(),
-                // localName);
+
                 String localName = typeQName.getLocalPart();
 
                 // Check to see if this is an anonymous type,
@@ -412,6 +409,10 @@
                 // an underscore to make sure we don't run
                 // into name collisions with similarly named
                 // non-anonymous types
+                
+                // OW Guillaume Change
+                // no replace > into _ (otherwise info from mapping file is not read)
+                /*
                 StringBuffer sb = new StringBuffer(localName);
                 int aidx = -1;
                 while ((aidx = sb.toString().indexOf(SymbolTable.ANON_TOKEN)) > -1) {
@@ -420,9 +421,8 @@
                             "_");
                 }
                 localName = sb.toString();
-                typeQName = new QName(typeQName.getNamespaceURI(),
-                        localName);
-
+                typeQName = new QName(typeQName.getNamespaceURI(), localName);
+*/
                 // If there is already an existing type,
                 // there will be a collision.
                 // If there is an existing anon type,
@@ -440,10 +440,13 @@
             // Now set the name with the constructed qname
             String javaType = mapper.getJavaType(typeQName);
             if (javaType == null) {
-                tEntry.setName(emitter.getJavaName(typeQName));
-            } else {
-                tEntry.setName(javaType);
+                javaType = emitter.getJavaName(typeQName);
+            }
+            if (isArray) {
+                javaType += "[]";
             }
+            tEntry.setName(javaType);
+
             Vector elements = tEntry.getContainedElements();
             if (elements != null) {
                 for (int i = 0; i < elements.size(); i++) {
@@ -910,6 +913,10 @@
                         if (name == null) {
                             name = operation.getName();
                         }
+                        // OW Change Jerome
+                        // operation name must be set otherwise problem during matching beetween
WSDD operation and java method
+                        operation.setName(name);
+                        // end
                         Parameters parameters = bEntry.getParameters(operation);
                         if (type == OperationType.SOLICIT_RESPONSE) {
                             parameters.signature = "    // " + Messages.getMessage("invalidSolResp00",
name);
@@ -919,9 +926,10 @@
                             System.err.println(Messages.getMessage("invalidNotif00", name));
                         } else { // ONE_WAY or REQUEST_RESPONSE
                             if (parameters != null) {
-                                String returnType =
-                                        mapper.getJavaMethodReturnType(bEntry, operation);
-                                if (returnType != null) {
+                                String returnType = mapper.getJavaMethodReturnType(bEntry,
operation);
+                                // OW Change Guillaume
+                                // parameters.returnParam may be null (no return value for
the given operation)
+                                if (returnType != null && parameters.returnParam
!= null) {
                                     parameters.returnParam.getType().setName(returnType);
                                 }
                                 for (int j = 0; j < parameters.list.size(); ++j) {
@@ -1053,13 +1061,13 @@
     public BaseTypeMapping getBaseTypeMapping() {
         if (btm == null) {
             btm = new BaseTypeMapping() {
-                TypeMapping defaultTM = DefaultTypeMappingImpl.getSingleton();
+
+                //TypeMapping defaultTM = DefaultTypeMappingImpl.getSingleton();
 
                 public String getBaseName(QName qNameIn) {
-                    javax.xml.namespace.QName qName =
-                            new javax.xml.namespace.QName(qNameIn.getNamespaceURI(),
-                                    qNameIn.getLocalPart());
-                    Class cls = defaultTM.getClassForQName(qName);
+                    javax.xml.namespace.QName qName = new javax.xml.namespace.QName(qNameIn.getNamespaceURI(),
qNameIn
+                            .getLocalPart());
+                    Class cls = emitter.getDefaultTypeMapping().getClassForQName(qName);
                     if (cls == null)
                         return null;
                     else

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeStubWriter.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeStubWriter.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeStubWriter.java (original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeStubWriter.java Thu
Feb 10 09:09:09 2005
@@ -16,8 +16,8 @@
 package org.apache.geronimo.ews.jaxrpcmapping;
 
 import org.apache.axis.Constants;
-import org.apache.axis.enum.Style;
-import org.apache.axis.enum.Use;
+import org.apache.axis.constants.Style;
+import org.apache.axis.constants.Use;
 import org.apache.axis.utils.JavaUtils;
 import org.apache.axis.utils.Messages;
 import org.apache.axis.wsdl.symbolTable.BindingEntry;
@@ -75,12 +75,12 @@
     static HashMap uses = new HashMap();
 
     static {
-        styles.put(Style.DOCUMENT, "org.apache.axis.enum.Style.DOCUMENT");
-        styles.put(Style.RPC, "org.apache.axis.enum.Style.RPC");
-        styles.put(Style.MESSAGE, "org.apache.axis.enum.Style.MESSAGE");
-        styles.put(Style.WRAPPED, "org.apache.axis.enum.Style.WRAPPED");
-        uses.put(Use.ENCODED, "org.apache.axis.enum.Use.ENCODED");
-        uses.put(Use.LITERAL, "org.apache.axis.enum.Use.LITERAL");
+        styles.put(Style.DOCUMENT, "org.apache.axis.constants.Style.DOCUMENT");
+        styles.put(Style.RPC, "org.apache.axis.constants.Style.RPC");
+        styles.put(Style.MESSAGE, "org.apache.axis.constants.Style.MESSAGE");
+        styles.put(Style.WRAPPED, "org.apache.axis.constants.Style.WRAPPED");
+        uses.put(Use.ENCODED, "org.apache.axis.constants.Use.ENCODED");
+        uses.put(Use.LITERAL, "org.apache.axis.constants.Use.LITERAL");
     }
 
     static int OPERDESC_PER_BLOCK = 10;
@@ -144,7 +144,10 @@
         pw.println("        } else {");
         pw.println("            super.service = service;");
         pw.println("        }");
-
+        pw
+                .println("        ((org.apache.axis.client.Service)super.service).setTypeMappingVersion(\""
+                        + emitter.getTypeMappingVersion() + "\");");
+        List deferredBindings = new ArrayList();
         // keep track of how many type mappings we write out
         int typeMappingCount = 0;
         if (types.size() > 0) {
@@ -152,19 +155,7 @@
             while (it.hasNext()) {
                 TypeEntry type = (TypeEntry) it.next();
                 // Note this same check is repeated in JavaDeployWriter.
-
-                // 1) Don't register types that are base (primitive) types.
-                //    If the baseType != null && getRefType() != null this
-                //    is a simpleType that must be registered.
-                // 2) Don't register the special types for collections
-                //    (indexed properties) or elements
-                // 3) Don't register types that are not referenced
-                //    or only referenced in a literal context.
-                if ((type.getBaseType() != null && type.getRefType() == null) ||
-                        type instanceof CollectionTE ||
-                        type instanceof Element ||
-                        !type.isReferenced() ||
-                        type.isOnlyLiteralReferenced()) {
+                if (!Utils.shouldEmit(type)) {
                     continue;
                 }
 
@@ -752,6 +743,7 @@
         if (oneway) {
             pw.print("        _call.invokeOneWay(");
         } else {
+            pw.print(" try {");
             pw.print("        java.lang.Object _resp = _call.invoke(");
         }
         pw.print("new java.lang.Object[] {");
@@ -836,6 +828,35 @@
         } else {
             pw.println("        extractAttachments(_call);");
         }
+        // End catch
+        // Get faults
+        Map faults = parms.faults;
+        // Get fauls of signature
+        String[] throwsSig = parms.signature.split("throws");
+        List exceptionsThrowsList = new ArrayList();
+        if (throwsSig != null && throwsSig.length > 1) {
+            String[] thrExcep = throwsSig[1].split(",");
+            for (int i = 0; i < thrExcep.length; i++) {
+                exceptionsThrowsList.add(thrExcep[i]);
+            }
+        }
+        pw
+                .println("  } catch (org.apache.axis.AxisFault axisFaultException) {");
+        if (faults != null && faults.size() > 0) {
+            pw.println("    if (axisFaultException.detail != null) {");
+            for (Iterator faultIt = exceptionsThrowsList.iterator(); faultIt
+                    .hasNext();) {
+                String exceptionFullName = (String) faultIt.next();
+                pw.println("        if (axisFaultException.detail instanceof "
+                        + exceptionFullName + ") {");
+                pw.println("              throw (" + exceptionFullName
+                        + ") axisFaultException.detail;");
+                pw.println("         }");
+            }
+            pw.println("   }");
+        }
+        pw.println("  throw axisFaultException;");
+        pw.println("}");
     } // writeResponseHandling
 
     /**

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/JaxRpcMapper.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/JaxRpcMapper.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/JaxRpcMapper.java (original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/JaxRpcMapper.java Thu
Feb 10 09:09:09 2005
@@ -78,4 +78,6 @@
      */
     public abstract String getJavaMethodName(BindingEntry bEntry,
                                              Operation operation);
+
+    public abstract boolean hasWrappedElement();
 }

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/WsdlToJ2ee.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/WsdlToJ2ee.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/WsdlToJ2ee.java (original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/WsdlToJ2ee.java Thu Feb
10 09:09:09 2005
@@ -15,7 +15,7 @@
  */
 package org.apache.geronimo.ews.jaxrpcmapping;
 
-import org.apache.axis.enum.Scope;
+import org.apache.axis.constants.Scope;
 import org.apache.axis.utils.CLArgsParser;
 import org.apache.axis.utils.CLOption;
 import org.apache.axis.utils.CLOptionDescriptor;

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/XMLBeansJaxRpcMapper.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/XMLBeansJaxRpcMapper.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/XMLBeansJaxRpcMapper.java
(original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/jaxrpcmapping/XMLBeansJaxRpcMapper.java
Thu Feb 10 09:09:09 2005
@@ -49,6 +49,8 @@
 public class XMLBeansJaxRpcMapper implements JaxRpcMapper {
 
     private JavaWsdlMappingType mapping;
+    
+    private boolean wrappedElement = false;
 
     public void loadMappingFromInputStream(InputStream is) throws GenerationFault {
         try {
@@ -61,6 +63,7 @@
             e.printStackTrace();
             throw GenerationFault.createGenerationFault(e);
         }
+        wrappedElement = checkWrappedElemente();
     }
 
     public void loadMappingFromDir(String path) throws GenerationFault {
@@ -78,6 +81,7 @@
             e2.printStackTrace();
             throw GenerationFault.createGenerationFault(e2);
         }
+        wrappedElement = checkWrappedElemente();
     }
 
     public int getPackageMappingCount() {
@@ -242,6 +246,23 @@
         return null;
     }
 
+    public boolean checkWrappedElemente() {
+        if (mapping == null) {
+            return false;
+        }
+        ServiceEndpointInterfaceMappingType[] serviceList = mapping.getServiceEndpointInterfaceMappingArray();
+        for (int i = 0; i < serviceList.length; i++) {
+            ServiceEndpointMethodMappingType[] methodList = serviceList[i].getServiceEndpointMethodMappingArray();
+            for (int k = 0; k < methodList.length; k++) {
+                ServiceEndpointMethodMappingType methodMapping = methodList[k];
+                if (methodMapping.getWrappedElement() != null) {
+                    // do use wrapped style
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
     /**
      * @param entry
      * @param operation
@@ -309,5 +330,12 @@
             }
         }
         return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.geronimo.ews.jaxrpcmapping.JaxRpcMapper#hasWrappedElement()
+     */
+    public boolean hasWrappedElement() {
+        return wrappedElement;
     }
 }

Modified: webservices/ews/trunk/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java
URL: http://svn.apache.org/viewcvs/webservices/ews/trunk/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java?view=diff&r1=153275&r2=153276
==============================================================================
--- webservices/ews/trunk/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java
(original)
+++ webservices/ews/trunk/src/org/apache/geronimo/ews/ws4j2ee/toWs/ws/J2eeDeployWriter.java
Thu Feb 10 09:09:09 2005
@@ -17,9 +17,9 @@
 
 import org.apache.axis.Constants;
 import org.apache.axis.deployment.wsdd.WSDDConstants;
-import org.apache.axis.enum.Scope;
-import org.apache.axis.enum.Style;
-import org.apache.axis.enum.Use;
+import org.apache.axis.constants.Scope;
+import org.apache.axis.constants.Style;
+import org.apache.axis.constants.Use;
 import org.apache.axis.utils.JavaUtils;
 import org.apache.axis.utils.Messages;
 import org.apache.axis.wsdl.symbolTable.BindingEntry;



---------------------------------------------------------------------
To unsubscribe, e-mail: ews-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: ews-dev-help@ws.apache.org


Mime
View raw message