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 di...@apache.org on 2007/03/18 05:08:06 UTC
svn commit: r519539 -
/webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java
Author: dims
Date: Sat Mar 17 21:08:05 2007
New Revision: 519539
URL: http://svn.apache.org/viewvc?view=rev&rev=519539
Log:
Fix for AXIS2-1749 and AXIS2-2116
Modified:
webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java
Modified: webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java?view=diff&rev=519539&r1=519538&r2=519539
==============================================================================
--- webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java (original)
+++ webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java Sat Mar 17 21:08:05 2007
@@ -298,12 +298,39 @@
XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema);
XmlSchemaSequence sequence = new XmlSchemaSequence();
+ XmlSchemaComplexContentExtension complexExtension = new XmlSchemaComplexContentExtension() ;
XmlSchemaElement eltOuter = new XmlSchemaElement();
schemaTypeName = new QName(targetNameSpace, simpleName, targetNamespacePrefix);
eltOuter.setName(simpleName);
eltOuter.setQName(schemaTypeName);
- complexType.setParticle(sequence);
+
+ JClass sup = javaType.getSuperclass() ;
+
+// AXIS2-1749 inheritance
+ if ((sup != null) && !( "java.lang.Object".compareTo(sup.getQualifiedName()) == 0)) {
+
+ String superclassname = getSimpleName(sup) ;
+
+ String tgtNamespace = resolveSchemaNamespace(sup.getContainingPackage().getQualifiedName()) ;
+ String tgtNamespacepfx = (String) targetNamespacePrefixMap.get(tgtNamespace);
+
+ QName basetype = new QName(tgtNamespace,superclassname,tgtNamespacepfx) ;
+
+ complexExtension.setBaseTypeName(basetype) ;
+ complexExtension.setParticle(sequence) ;
+
+ XmlSchemaComplexContent contentModel = new XmlSchemaComplexContent() ;
+
+ contentModel.setContent(complexExtension) ;
+
+ complexType.setContentModel(contentModel) ;
+
+ }
+ else
+ complexType.setParticle(sequence);
+
+
complexType.setName(simpleName);
xmlSchema.getItems().add(eltOuter);
@@ -318,66 +345,155 @@
JClass tempClass = javaType;
Set propertiesSet = new HashSet();
- while (tempClass != null && !"java.lang.Object".equals(getQualifiedName(tempClass))) {
- JProperty[] tempProperties = tempClass.getDeclaredProperties();
+ Set propertiesNames = new HashSet() ;
+
+ // while (tempClass != null && !"java.lang.Object".equals(getQualifiedName(tempClass))) {
+// With 1749 we don'nt need properties of superclasses
+ JProperty[] tempProperties = tempClass.getDeclaredProperties();
for (int i = 0; i < tempProperties.length; i++) {
propertiesSet.add(tempProperties[i]);
}
- tempClass = tempClass.getSuperclass();
- }
+ // tempClass = tempClass.getSuperclass();
+ // }
+
JProperty[] properties = (JProperty[]) propertiesSet.toArray(new JProperty[0]);
Arrays.sort(properties);
for (int i = 0; i < properties.length; i++) {
JProperty property = properties[i];
String propertyName = getQualifiedName(property.getType());
boolean isArryType = property.getType().isArrayType();
- if (isArryType) {
- propertyName = getQualifiedName(property.getType().getArrayComponentType());
- }
- if(isArryType&&"byte".equals(propertyName)){
- propertyName = "base64Binary";
- }
- if (typeTable.isSimpleType(propertyName)) {
- XmlSchemaElement elt1 = new XmlSchemaElement();
- elt1.setName(getCorrectName(getSimpleName(property)));
- elt1.setSchemaTypeName(typeTable.getSimpleSchemaTypeName(propertyName));
- sequence.getItems().add(elt1);
- if (isArryType) {
- elt1.setMaxOccurs(Long.MAX_VALUE);
- elt1.setMinOccurs(1);
- }
- if (String.class.getName().equals(propertyName)) {
- elt1.setNillable(true);
- }
- } else {
- if (isArryType) {
- generateSchema(property.getType().getArrayComponentType());
- } else {
- generateSchema(property.getType());
- }
- XmlSchemaElement elt1 = new XmlSchemaElement();
- elt1.setName(getCorrectName(getSimpleName(property)));
- elt1.setSchemaTypeName(typeTable.getComplexSchemaType(propertyName));
- sequence.getItems().add(elt1);
- if (isArryType) {
- elt1.setMaxOccurs(Long.MAX_VALUE);
- elt1.setMinOccurs(1);
- }
- elt1.setNillable(true);
-
- if (!((NamespaceMap) xmlSchema.getNamespaceContext()).values().
- contains(typeTable.getComplexSchemaType(propertyName).getNamespaceURI())) {
- XmlSchemaImport importElement = new XmlSchemaImport();
- importElement.setNamespace(typeTable.getComplexSchemaType(propertyName).getNamespaceURI());
- xmlSchema.getItems().add(importElement);
- ((NamespaceMap) xmlSchema.getNamespaceContext()).
- put(generatePrefix(), typeTable.getComplexSchemaType(propertyName).getNamespaceURI());
- }
- }
+
+ String propname = getCorrectName(property.getSimpleName()) ;
+
+ propertiesNames.add(propname) ;
+
+ this.generateSchemaforFieldsandProperties(xmlSchema,sequence,property.getType(),propname, isArryType) ;
+
+ }
+
+ // AXIS2-2116 support for fields
+
+ JField[] tempFields = javaType.getDeclaredFields() ;
+ HashMap FieldMap = new HashMap() ;
+
+
+ for (int i = 0; i < tempFields.length; i++) {
+ // create a element for the field only if it is public
+ // and there is no property with the same name
+
+ if (tempFields[i].isPublic()) {
+
+ // skip field with same name as a property
+ if (!propertiesNames.contains(tempFields[i].getSimpleName())) {
+
+ FieldMap.put(tempFields[i].getSimpleName(),tempFields[i]) ;
+ }
+ }
+
+ }
+
+ // remove fields from super classes patch for defect Annogen-21
+ // getDeclaredFields is incorrectly returning fields of super classes as well
+ // getDeclaredProperties used earlier works correctly
+
+ JClass supr = javaType.getSuperclass() ;
+ while(supr != null && supr.getQualifiedName().compareTo("java.lang.Object") != 0) {
+
+ JField[] suprFields = supr.getFields() ;
+
+ for (int i = 0 ; i < suprFields.length ;i++) {
+
+ FieldMap.remove(suprFields[i].getSimpleName()) ;
+
+ }
+
+ supr = supr.getSuperclass() ;
+
+
}
+
+ // end patch for Annogen -21
+
+ JField[] froperties = (JField[]) FieldMap.values().toArray(new JField[0]);
+ Arrays.sort(froperties);
+
+ for (int i = 0; i < froperties.length; i++) {
+ JField field = froperties[i];
+ String propertyName = field.getType().getQualifiedName();
+ boolean isArryType = field.getType().isArrayType();
+
+ this.generateSchemaforFieldsandProperties(xmlSchema, sequence,field.getType(),field.getSimpleName(), isArryType) ;
+ }
+
+
+
}
return schemaTypeName;
}
+
+
+ // moved code common to Fields & properties out of above method
+ private void generateSchemaforFieldsandProperties(XmlSchema xmlSchema,XmlSchemaSequence sequence, JClass type, String name, boolean isArryType)
+ throws Exception {
+
+ String propertyName ;
+
+ if (isArryType) {
+ propertyName = getQualifiedName(type.getArrayComponentType()) ;
+ } else
+ propertyName = getQualifiedName(type) ;
+
+ if(isArryType&&"byte".equals(propertyName)){
+ propertyName = "base64Binary";
+ }
+
+ if (typeTable.isSimpleType(propertyName)) {
+ XmlSchemaElement elt1 = new XmlSchemaElement();
+ elt1.setName(name);
+ elt1.setSchemaTypeName(typeTable.getSimpleSchemaTypeName(propertyName));
+ sequence.getItems().add(elt1);
+
+ if (isArryType) {
+ elt1.setMaxOccurs(Long.MAX_VALUE);
+ elt1.setMinOccurs(1);
+ }
+
+
+ if (String.class.getName().equals(propertyName)) {
+ elt1.setNillable(true);
+ }
+
+
+ } else {
+ if (isArryType) {
+ generateSchema(type.getArrayComponentType());
+ } else {
+ generateSchema(type);
+ }
+ XmlSchemaElement elt1 = new XmlSchemaElement();
+ elt1.setName(name);
+ elt1.setSchemaTypeName(typeTable.getComplexSchemaType(propertyName));
+ sequence.getItems().add(elt1);
+ if (isArryType) {
+ elt1.setMaxOccurs(Long.MAX_VALUE);
+ elt1.setMinOccurs(1);
+ }
+ elt1.setNillable(true);
+
+ if (!((NamespaceMap) xmlSchema.getNamespaceContext()).values().
+ contains(typeTable.getComplexSchemaType(propertyName).getNamespaceURI())) {
+ XmlSchemaImport importElement = new XmlSchemaImport();
+ importElement.setNamespace(typeTable.getComplexSchemaType(propertyName).getNamespaceURI());
+ xmlSchema.getItems().add(importElement);
+ ((NamespaceMap) xmlSchema.getNamespaceContext()).
+ put(generatePrefix(), typeTable.getComplexSchemaType(propertyName).getNamespaceURI());
+ }
+ }
+
+
+
+ }
+
private QName generateSchemaForType(XmlSchemaSequence sequence, JClass type, String partName) throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org