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 am...@apache.org on 2007/02/06 06:26:14 UTC
svn commit: r503992 - in /webservices/axis2/trunk/java/modules/adb-codegen:
./ src/org/apache/axis2/schema/ src/org/apache/axis2/schema/writer/
test-resources/testsuite/ test/org/apache/axis2/schema/enumeration/
test/org/apache/axis2/schema/restriction/
Author: amilas
Date: Mon Feb 5 21:26:13 2007
New Revision: 503992
URL: http://svn.apache.org/viewvc?view=rev&rev=503992
Log:
Add simple type restriction support for another simple type
Added:
webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/enumeration.xsd
webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/enumeration/
webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/enumeration/EnumerationTest.java
Modified:
webservices/axis2/trunk/java/modules/adb-codegen/maven.xml
webservices/axis2/trunk/java/modules/adb-codegen/pom.xml
webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java
webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/restrictions.xsd
webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/restriction/SimpleRestrictionTest.java
Modified: webservices/axis2/trunk/java/modules/adb-codegen/maven.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/maven.xml?view=diff&rev=503992&r1=503991&r2=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/maven.xml (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/maven.xml Mon Feb 5 21:26:13 2007
@@ -186,6 +186,27 @@
<arg file="${testsuite.source.dir}/all.xsd"/>
<arg file="${schema.generated.src.dir}"/>
</java>
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling enumeration.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/enumeration.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
+
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling restrictions.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/restrictions.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
Modified: webservices/axis2/trunk/java/modules/adb-codegen/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/pom.xml?view=diff&rev=503992&r1=503991&r2=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/pom.xml (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/pom.xml Mon Feb 5 21:26:13 2007
@@ -276,6 +276,28 @@
<arg file="${testsuite.source.dir}/all.xsd"/>
<arg file="${schema.generated.src.dir}"/>
</java>
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling enumeration.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/enumeration.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling restrictions.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/restrictions.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
+
+
</tasks>
</configuration>
<goals>
Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java?view=diff&rev=503992&r1=503991&r2=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java Mon Feb 5 21:26:13 2007
@@ -59,6 +59,8 @@
import java.util.Map;
import java.util.Properties;
+import com.sun.org.apache.xerces.internal.impl.dtd.XMLSimpleType;
+
/*
* Copyright 2004,2005 The Apache Software Foundation.
*
@@ -1209,6 +1211,7 @@
} else if (type instanceof XmlSchemaSimpleType) {
//Do the actual parent setting
+ //TODO handle the varios parent types here
metaInfHolder.setAsParent(baseMetaInfoHolder);
}
@@ -1288,7 +1291,10 @@
}
}
//process restriction base type
- processSimpleRestrictionBaseType(restriction.getBaseTypeName(), restriction.getBaseTypeName(), metaInfHolder);
+ processSimpleRestrictionBaseType(restriction.getBaseTypeName(),
+ restriction.getBaseTypeName(),
+ metaInfHolder,
+ parentSchema);
metaInfHolder.setSimple(true);
}
}
@@ -1323,8 +1329,10 @@
className, SchemaConstants.ELEMENT_TYPE);
}
metaInfHolder.setSimple(true);
+ // we have already process when it comes to this place
} else if (processedTypemap.containsKey(extBaseType)) {
//set the extension base class name
+
XmlSchemaType type = getType(parentSchema, extBaseType);
if (type instanceof XmlSchemaSimpleType) {
metaInfHolder.setSimple(true);
@@ -1341,8 +1349,8 @@
metaInfHolder.setExtensionClassName(className);
copyMetaInfoHierarchy(metaInfHolder, extBaseType, parentSchema);
}
- }
+ }
} else {
metaInfHolder.setSimple(true);
}
@@ -1360,23 +1368,37 @@
* @param resBaseType
* @param metaInfHolder
*/
- public void processSimpleRestrictionBaseType(QName qName, QName resBaseType, BeanWriterMetaInfoHolder metaInfHolder) throws SchemaCompilationException {
+ public void processSimpleRestrictionBaseType(QName qName,
+ QName resBaseType,
+ BeanWriterMetaInfoHolder metaInfHolder,
+ XmlSchema parentSchema) throws SchemaCompilationException {
//find the class name
String className = findClassName(resBaseType, false);
//this means the schema type actually returns a different QName
- if (changedTypeMap.containsKey(resBaseType)) {
+ if (baseSchemaTypeMap.containsKey(resBaseType)){
+ if (changedTypeMap.containsKey(resBaseType)) {
metaInfHolder.registerMapping(qName,
(QName) changedTypeMap.get(resBaseType),
className, SchemaConstants.ELEMENT_TYPE);
- } else {
- metaInfHolder.registerMapping(qName,
- resBaseType,
- className, SchemaConstants.ELEMENT_TYPE);
+ } else {
+ metaInfHolder.registerMapping(qName,
+ resBaseType,
+ className, SchemaConstants.ELEMENT_TYPE);
+ }
+ } else if (processedTypemap.containsKey(resBaseType)){
+ //this is not a standared type
+ // so the parent class must extend it
+ metaInfHolder.setSimple(true);
+ metaInfHolder.setRestriction(true);
+ metaInfHolder.setRestrictionClassName(className);
+ copyMetaInfoHierarchy(metaInfHolder, resBaseType, parentSchema);
}
metaInfHolder.setRestrictionBaseType(resBaseType);
+
+
}
/**
@@ -1491,24 +1513,24 @@
if (att.getQName() != null) {
if (baseSchemaTypeMap.containsKey(schemaTypeName)) {
- metainf.registerMapping(att.getQName(), schemaTypeName,
- baseSchemaTypeMap.get(schemaTypeName).toString(), SchemaConstants.ATTRIBUTE_TYPE);
+ metainf.registerMapping(att.getQName(), schemaTypeName,
+ baseSchemaTypeMap.get(schemaTypeName).toString(), SchemaConstants.ATTRIBUTE_TYPE);
- // add optional attribute status if set
- String use = att.getUse().getValue();
- if (use.indexOf("optional") != -1) {
- metainf.addtStatus(att.getQName(), SchemaConstants.OPTIONAL_TYPE);
- }
+ // add optional attribute status if set
+ String use = att.getUse().getValue();
+ if (use.indexOf("optional") != -1) {
+ metainf.addtStatus(att.getQName(), SchemaConstants.OPTIONAL_TYPE);
+ }
// after
} else {
XmlSchemaType type = getType(parentSchema, schemaTypeName);
if (type instanceof XmlSchemaSimpleType) {
XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType) type;
// we only support simple type restriction
- if (simpleType.getContent() instanceof XmlSchemaSimpleTypeRestriction){
+ if (simpleType.getContent() instanceof XmlSchemaSimpleTypeRestriction) {
if (!isAlreadyProcessed(schemaTypeName)) {
- //process simple type
- processSimpleSchemaType(simpleType, null, parentSchema);
+ //process simple type
+ processSimpleSchemaType(simpleType, null, parentSchema);
}
metainf.registerMapping(att.getQName(),
schemaTypeName,
@@ -1925,38 +1947,47 @@
QName baseTypeName = restriction.getBaseTypeName();
//check whether the base type is one of the base schema types
+ QName qName = simpleType.getQName();
+ if (qName == null) {
+ qName = (QName) simpleType.getMetaInfoMap().get(SchemaConstants.SchemaCompilerInfoHolder.FAKE_QNAME);
+ }
if (baseSchemaTypeMap.containsKey(baseTypeName)) {
//process restriction base type
- QName qName = simpleType.getQName();
- if (qName == null) {
- qName = (QName) simpleType.getMetaInfoMap().get(SchemaConstants.SchemaCompilerInfoHolder.FAKE_QNAME);
- }
- processSimpleRestrictionBaseType(qName, restriction.getBaseTypeName(), metaInfHolder);
+ processSimpleRestrictionBaseType(qName, restriction.getBaseTypeName(), metaInfHolder, parentSchema);
//process facets
processFacets(restriction, metaInfHolder, parentSchema);
} else {
//recurse
- if (restriction.getBaseType() != null) {
- processSimpleSchemaType(restriction.getBaseType(), null, parentSchema);
+ // this must be a xmlschema bug
+ // it should return the schematype for restriction.getBaseType():
+ XmlSchemaType restrictionBaseType = getType(parentSchema, baseTypeName);
+ if (restrictionBaseType instanceof XmlSchemaSimpleType) {
+ if ((restrictionBaseType != null) && (!isAlreadyProcessed(baseTypeName))) {
+ processSimpleSchemaType((XmlSchemaSimpleType) restrictionBaseType, null, parentSchema);
+ }
+ // process restriction
+ processSimpleRestrictionBaseType(qName, restriction.getBaseTypeName(), metaInfHolder, parentSchema);
}
+
+
}
} else if (content instanceof XmlSchemaSimpleTypeUnion) {
XmlSchemaSimpleTypeUnion simpleTypeUnion = (XmlSchemaSimpleTypeUnion) content;
QName[] qnames = simpleTypeUnion.getMemberTypesQNames();
QName qname;
- for (int i = 0; i< qnames.length; i++){
+ for (int i = 0; i < qnames.length; i++) {
qname = qnames[i];
- if (baseSchemaTypeMap.containsKey(qname)){
+ if (baseSchemaTypeMap.containsKey(qname)) {
metaInfHolder.addMemberType(qname, (String) baseSchemaTypeMap.get(qname));
} else {
- XmlSchemaType type = getType(parentSchema,qname);
- if (type instanceof XmlSchemaSimpleType){
+ XmlSchemaType type = getType(parentSchema, qname);
+ if (type instanceof XmlSchemaSimpleType) {
XmlSchemaSimpleType memberSimpleType = (XmlSchemaSimpleType) type;
- if (!isAlreadyProcessed(qname)){
- processSimpleSchemaType(memberSimpleType,null, parentSchema);
+ if (!isAlreadyProcessed(qname)) {
+ processSimpleSchemaType(memberSimpleType, null, parentSchema);
}
- metaInfHolder.addMemberType(qname,(String) processedTypemap.get(qname));
+ metaInfHolder.addMemberType(qname, (String) processedTypemap.get(qname));
} else {
throw new SchemaCompilationException("Unions can not have complex types as a member type");
}
Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java?view=diff&rev=503992&r1=503991&r2=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java Mon Feb 5 21:26:13 2007
@@ -679,7 +679,10 @@
XSLTUtils.addAttribute(model, "occuranceChanged", "yes", property);
}
- if (metainf.isRestriction() && missingQNames.contains(name)) {
+ // what happed if this contain attributes
+ // TODO: check the meaning of this removed property
+
+ if (metainf.isRestriction() && missingQNames.contains(name) && !metainf.isSimple()) {
//XSLTUtils.addAttribute(model, "restricted", "yes", property);
XSLTUtils.addAttribute(model, "removed", "yes", property);
}
Added: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/enumeration.xsd
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/enumeration.xsd?view=auto&rev=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/enumeration.xsd (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/enumeration.xsd Mon Feb 5 21:26:13 2007
@@ -0,0 +1,31 @@
+<s:schema elementFormDefault="qualified"
+ xmlns:s="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://tempuri.org/"
+ targetNamespace="http://tempuri.org/">
+ <s:element name="CountPlacesInRect">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="1" maxOccurs="1" name="upperleft" type="s:string"/>
+ <s:element minOccurs="1" maxOccurs="1" name="lowerright" type="s:string"/>
+ <s:element minOccurs="1" maxOccurs="1" name="ptype" type="tns:PlaceType"/>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:simpleType name="PlaceType">
+ <s:restriction base="s:string">
+ <s:enumeration value="UnknownPlaceType"/>
+ <s:enumeration value="AirRailStation"/>
+ <s:enumeration value="BayGulf"/>
+ <s:enumeration value="CapePeninsula"/>
+ <s:enumeration value="CityTown"/>
+ <s:enumeration value="HillMountain"/>
+ <s:enumeration value="Island"/>
+ <s:enumeration value="Lake"/>
+ <s:enumeration value="OtherLandFeature"/>
+ <s:enumeration value="OtherWaterFeature"/>
+ <s:enumeration value="ParkBeach"/>
+ <s:enumeration value="PointOfInterest"/>
+ <s:enumeration value="River"/>
+ </s:restriction>
+ </s:simpleType>
+</s:schema>
Modified: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/restrictions.xsd
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/restrictions.xsd?view=diff&rev=503992&r1=503991&r2=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/restrictions.xsd (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/restrictions.xsd Mon Feb 5 21:26:13 2007
@@ -0,0 +1,19 @@
+<xsd:schema elementFormDefault="qualified"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://tempuri.org/"
+ targetNamespace="http://tempuri.org/">
+
+ <xsd:simpleType name="NewNormalizedStringType">
+ <xsd:restriction base="xsd:normalizedString"/>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="NormalizedStringType">
+ <xsd:restriction base="tns:NewNormalizedStringType"/>
+ </xsd:simpleType>
+
+ <xsd:complexType name="BusinessObjectDocumentType">
+ <xsd:attribute name="releaseID" type="tns:NormalizedStringType" use="required"></xsd:attribute>
+ <xsd:attribute name="versionID" type="tns:NormalizedStringType" use="optional"></xsd:attribute>
+ </xsd:complexType>
+ <xsd:element name="SimpleRestriction" type="tns:BusinessObjectDocumentType"/>
+</xsd:schema>
\ No newline at end of file
Added: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/enumeration/EnumerationTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/enumeration/EnumerationTest.java?view=auto&rev=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/enumeration/EnumerationTest.java (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/enumeration/EnumerationTest.java Mon Feb 5 21:26:13 2007
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.axis2.schema.enumeration;
+
+import junit.framework.TestCase;
+import org.tempuri.CountPlacesInRect;
+import org.tempuri.PlaceType;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.util.StAXUtils;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+
+
+public class EnumerationTest extends TestCase {
+
+ public void testEnumeration(){
+
+ CountPlacesInRect countPlacesInRect = new CountPlacesInRect();
+ countPlacesInRect.setLowerright("lowerright");
+ countPlacesInRect.setUpperleft("upperleft");
+ countPlacesInRect.setPtype(PlaceType.River);
+
+ OMElement omElement = countPlacesInRect.getOMElement(CountPlacesInRect.MY_QNAME,OMAbstractFactory.getOMFactory());
+ try {
+ String omElementString = omElement.toStringWithConsume();
+ System.out.println("OM String ==> " + omElementString);
+ XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
+ CountPlacesInRect newObject = CountPlacesInRect.Factory.parse(xmlReader);
+ assertEquals(countPlacesInRect.getPtype(),PlaceType.River);
+ } catch (Exception e) {
+ assertFalse(true);
+ }
+ }
+}
Modified: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/restriction/SimpleRestrictionTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/restriction/SimpleRestrictionTest.java?view=diff&rev=503992&r1=503991&r2=503992
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/restriction/SimpleRestrictionTest.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/restriction/SimpleRestrictionTest.java Mon Feb 5 21:26:13 2007
@@ -16,10 +16,46 @@
package org.apache.axis2.schema.restriction;
import junit.framework.TestCase;
+import org.tempuri.SimpleRestriction;
+import org.tempuri.BusinessObjectDocumentType;
+import org.tempuri.NormalizedStringType;
+import org.apache.axis2.databinding.types.NormalizedString;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.util.StAXUtils;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
public class SimpleRestrictionTest extends TestCase {
- public void testSimpleRestriction(){
-
+
+ public void testSimpleRestriction() {
+ SimpleRestriction simpleRestriction = new SimpleRestriction();
+ BusinessObjectDocumentType businessObjectDocumentType = new BusinessObjectDocumentType();
+ simpleRestriction.setSimpleRestriction(businessObjectDocumentType);
+ NormalizedStringType releaseID = new NormalizedStringType();
+ NormalizedStringType versionID = new NormalizedStringType();
+ businessObjectDocumentType.setReleaseID(releaseID);
+ businessObjectDocumentType.setVersionID(versionID);
+ releaseID.setNewNormalizedStringType(new NormalizedString("releaseID"));
+ versionID.setNewNormalizedStringType(new NormalizedString("versionID"));
+
+ OMElement omElement = simpleRestriction.getOMElement(SimpleRestriction.MY_QNAME,
+ OMAbstractFactory.getOMFactory());
+
+ try {
+ String omElementString = omElement.toStringWithConsume();
+ System.out.println("OM Element ==>" + omElement);
+ XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
+ SimpleRestriction newSimpleRestriction = SimpleRestriction.Factory.parse(xmlReader);
+ assertEquals(newSimpleRestriction.getSimpleRestriction().getVersionID().toString(),"versionID");
+ assertEquals(newSimpleRestriction.getSimpleRestriction().getReleaseID().toString(),"releaseID");
+ } catch (Exception e) {
+ assertFalse(true);
+ }
+
+
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org