You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by am...@apache.org on 2008/10/14 14:29:44 UTC
svn commit: r704514 -
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
Author: amilas
Date: Tue Oct 14 05:29:43 2008
New Revision: 704514
URL: http://svn.apache.org/viewvc?rev=704514&view=rev
Log:
fixed the issue Axis2-4073. added support for the beans inside the POJO classes
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java?rev=704514&r1=704513&r2=704514&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/java2wsdl/DefaultSchemaGenerator.java Tue Oct 14 05:29:43 2008
@@ -42,7 +42,6 @@
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.*;
@@ -569,10 +568,10 @@
// moved code common to Fields & properties out of above method
protected void generateSchemaforFieldsandProperties(XmlSchema xmlSchema,
XmlSchemaSequence sequence, Class type,
- String name, boolean isArryType)
+ String name, boolean isArrayType)
throws Exception {
String propertyName;
- if (isArryType) {
+ if (isArrayType) {
propertyName = type.getComponentType().getName();
if (type.getComponentType().isArray()) {
// this is a doble array element
@@ -597,54 +596,146 @@
new QName(xmlSchema.getTargetNamespace(), simpleTypeName), xmlSchemaComplexType);
}
- XmlSchemaElement elt1 = new XmlSchemaElement();
- elt1.setName(name);
- elt1.setSchemaTypeName(new QName(xmlSchema.getTargetNamespace(), simpleTypeName));
- sequence.getItems().add(elt1);
- elt1.setMaxOccurs(Long.MAX_VALUE);
- elt1.setMinOccurs(0);
+ if (isGenerateWrappedArrayTypes) {
+ XmlSchemaElement xmlSchemaElement = new XmlSchemaElement();
+ xmlSchemaElement.setName( name + "Wrapper");
+ xmlSchemaElement.setNillable(true);
+ sequence.getItems().add(xmlSchemaElement);
+
+ String complexTypeName = simpleTypeName + "Wrapper";
+
+ XmlSchemaComplexType xmlSchemaComplexType = new XmlSchemaComplexType(xmlSchema);
+ XmlSchemaSequence xmlSchemaSequence = new XmlSchemaSequence();
+ xmlSchemaComplexType.setParticle(xmlSchemaSequence);
+ xmlSchemaComplexType.setName(complexTypeName);
+
+ xmlSchema.getItems().add(xmlSchemaComplexType);
+ xmlSchema.getSchemaTypes().add(
+ new QName(schemaTargetNameSpace, xmlSchemaComplexType.getName()),
+ xmlSchemaComplexType);
+ addContentToMethodSchemaType(xmlSchemaSequence,
+ new QName(xmlSchema.getTargetNamespace(), simpleTypeName),
+ "array",
+ true);
+
+ xmlSchemaElement.setSchemaType(xmlSchemaComplexType);
+ xmlSchemaElement.setSchemaTypeName(new QName(schemaTargetNameSpace,
+ xmlSchemaComplexType.getName()));
+
+ } else {
+ addContentToMethodSchemaType(sequence,
+ new QName(xmlSchema.getTargetNamespace(), simpleTypeName),
+ name,
+ true);
- if (!type.isPrimitive()) {
- elt1.setNillable(true);
}
return;
}
} else {
propertyName = type.getName();
}
- if (isArryType && "byte".equals(propertyName)) {
+ if (isArrayType && "byte".equals(propertyName)) {
propertyName = "base64Binary";
}
if (isDataHandler(type)) {
propertyName = "base64Binary";
}
if (typeTable.isSimpleType(propertyName)) {
- XmlSchemaElement elt1 = new XmlSchemaElement();
- elt1.setName(name);
- elt1.setSchemaTypeName(typeTable.getSimpleSchemaTypeName(propertyName));
- sequence.getItems().add(elt1);
- if (isArryType && (!propertyName.equals("base64Binary"))) {
- elt1.setMaxOccurs(Long.MAX_VALUE);
- }
- elt1.setMinOccurs(0);
- if (!type.isPrimitive()) {
- elt1.setNillable(true);
+
+ if (isGenerateWrappedArrayTypes && isArrayType) {
+
+ XmlSchemaElement xmlSchemaElement = new XmlSchemaElement();
+ xmlSchemaElement.setName( name + "Wrapper");
+ xmlSchemaElement.setNillable(true);
+ sequence.getItems().add(xmlSchemaElement);
+
+ String complexTypeName =
+ typeTable.getSimpleSchemaTypeName(propertyName).getLocalPart() + "Wrapper";
+
+ XmlSchemaComplexType xmlSchemaComplexType = null;
+ if (xmlSchema.getTypeByName(complexTypeName) == null) {
+ xmlSchemaComplexType = new XmlSchemaComplexType(xmlSchema);
+ XmlSchemaSequence xmlSchemaSequence = new XmlSchemaSequence();
+ xmlSchemaComplexType.setParticle(xmlSchemaSequence);
+ xmlSchemaComplexType.setName(complexTypeName);
+
+ xmlSchema.getItems().add(xmlSchemaComplexType);
+ xmlSchema.getSchemaTypes().add(
+ new QName(schemaTargetNameSpace, xmlSchemaComplexType.getName()),
+ xmlSchemaComplexType);
+ addElementToSequence("array",
+ typeTable.getSimpleSchemaTypeName(propertyName),
+ xmlSchemaSequence,
+ propertyName.equals("base64Binary"),
+ isArrayType,
+ type.isPrimitive());
+ } else {
+ xmlSchemaComplexType = (XmlSchemaComplexType) xmlSchema.getTypeByName(complexTypeName);
+ }
+
+ xmlSchemaElement.setSchemaType(xmlSchemaComplexType);
+ xmlSchemaElement.setSchemaTypeName(new QName(schemaTargetNameSpace, xmlSchemaComplexType.getName()));
+
+
+ } else {
+ addElementToSequence(name,
+ typeTable.getSimpleSchemaTypeName(propertyName),
+ sequence,
+ propertyName.equals("base64Binary"),
+ isArrayType,
+ type.isPrimitive());
}
+
} else {
- if (isArryType) {
+ if (isArrayType) {
generateSchema(type.getComponentType());
} 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);
+
+ if (isGenerateWrappedArrayTypes && isArrayType) {
+
+ XmlSchemaElement xmlSchemaElement = new XmlSchemaElement();
+ xmlSchemaElement.setName(name + "Wrapper");
+ xmlSchemaElement.setNillable(true);
+ sequence.getItems().add(xmlSchemaElement);
+
+ String complexTypeName =
+ typeTable.getSimpleSchemaTypeName(propertyName).getLocalPart() + "Wrapper";
+
+ XmlSchemaComplexType xmlSchemaComplexType = null;
+ if (xmlSchema.getTypeByName(complexTypeName) == null) {
+ xmlSchemaComplexType = new XmlSchemaComplexType(xmlSchema);
+ XmlSchemaSequence xmlSchemaSequence = new XmlSchemaSequence();
+ xmlSchemaComplexType.setParticle(xmlSchemaSequence);
+ xmlSchemaComplexType.setName(complexTypeName);
+
+ xmlSchema.getItems().add(xmlSchemaComplexType);
+ xmlSchema.getSchemaTypes().add(
+ new QName(schemaTargetNameSpace, xmlSchemaComplexType.getName()),
+ xmlSchemaComplexType);
+ addElementToSequence("array",
+ typeTable.getSimpleSchemaTypeName(propertyName),
+ xmlSchemaSequence,
+ propertyName.equals("base64Binary"),
+ isArrayType,
+ type.isPrimitive());
+ } else {
+ xmlSchemaComplexType = (XmlSchemaComplexType) xmlSchema.getTypeByName(complexTypeName);
+ }
+
+ xmlSchemaElement.setSchemaType(xmlSchemaComplexType);
+ xmlSchemaElement.setSchemaTypeName(new QName(schemaTargetNameSpace, xmlSchemaComplexType.getName()));
+
+
+ } else {
+ addElementToSequence(name,
+ typeTable.getComplexSchemaType(propertyName),
+ sequence,
+ false,
+ isArrayType,
+ type.isPrimitive());
}
- elt1.setMinOccurs(0);
- elt1.setNillable(true);
if (typeTable.getComplexSchemaType(propertyName) != null && !((NamespaceMap) xmlSchema.getNamespaceContext()).values().
contains(typeTable.getComplexSchemaType(propertyName).getNamespaceURI())) {
@@ -661,6 +752,25 @@
}
+ private void addElementToSequence(String name,
+ QName propertyQName,
+ XmlSchemaSequence sequence,
+ boolean isBase64Binary,
+ boolean isArryType,
+ boolean isPrimitive) {
+ XmlSchemaElement elt1 = new XmlSchemaElement();
+ elt1.setName(name);
+ elt1.setSchemaTypeName(propertyQName);
+ sequence.getItems().add(elt1);
+ if (isArryType && !isBase64Binary) {
+ elt1.setMaxOccurs(Long.MAX_VALUE);
+ }
+ elt1.setMinOccurs(0);
+ if (!isPrimitive) {
+ elt1.setNillable(true);
+ }
+ }
+
private QName generateSchemaForType(XmlSchemaSequence sequence, Class type, String partName)
throws Exception {
@@ -694,7 +804,7 @@
if (isGenerateWrappedArrayTypes) {
XmlSchemaElement xmlSchemaElement = new XmlSchemaElement();
- xmlSchemaElement.setName("arrayWrapper");
+ xmlSchemaElement.setName(partName + "Wrapper");
xmlSchemaElement.setNillable(true);
sequence.getItems().add(xmlSchemaElement);
@@ -750,10 +860,46 @@
QName schemaTypeName = typeTable.getSimpleSchemaTypeName(classTypeName);
if (schemaTypeName == null) {
schemaTypeName = generateSchema(type);
- addContentToMethodSchemaType(sequence,
+ if (isGenerateWrappedArrayTypes && isArrayType) {
+
+ XmlSchemaElement xmlSchemaElement = new XmlSchemaElement();
+ xmlSchemaElement.setName(partName + "Wrapper");
+ xmlSchemaElement.setNillable(true);
+ sequence.getItems().add(xmlSchemaElement);
+
+ String complexTypeName = schemaTypeName.getLocalPart() + "Wrapper";
+ XmlSchema xmlSchema = getXmlSchema(schemaTargetNameSpace);
+
+ XmlSchemaComplexType xmlSchemaComplexType = null;
+ if (xmlSchema.getTypeByName(complexTypeName) == null) {
+ xmlSchemaComplexType = new XmlSchemaComplexType(xmlSchema);
+ XmlSchemaSequence xmlSchemaSequence = new XmlSchemaSequence();
+ xmlSchemaComplexType.setParticle(xmlSchemaSequence);
+ xmlSchemaComplexType.setName(complexTypeName);
+
+ xmlSchema.getItems().add(xmlSchemaComplexType);
+ xmlSchema.getSchemaTypes().add(
+ new QName(schemaTargetNameSpace, xmlSchemaComplexType.getName()),
+ xmlSchemaComplexType);
+ addContentToMethodSchemaType(xmlSchemaSequence,
+ schemaTypeName,
+ "array",
+ isArrayType);
+ } else {
+ xmlSchemaComplexType = (XmlSchemaComplexType) xmlSchema.getTypeByName(complexTypeName);
+ }
+
+ xmlSchemaElement.setSchemaType(xmlSchemaComplexType);
+ xmlSchemaElement.setSchemaTypeName(new QName(schemaTargetNameSpace, xmlSchemaComplexType.getName()));
+
+
+ } else {
+ addContentToMethodSchemaType(sequence,
schemaTypeName,
partName,
isArrayType);
+ }
+
String schemaNamespace;
schemaNamespace = resolveSchemaNamespace(getQualifiedName(type.getPackage()));
addImport(getXmlSchema(schemaNamespace), schemaTypeName);
@@ -761,9 +907,8 @@
} else {
if (isGenerateWrappedArrayTypes && isArrayType) {
-
XmlSchemaElement xmlSchemaElement = new XmlSchemaElement();
- xmlSchemaElement.setName("arrayWrapper");
+ xmlSchemaElement.setName(partName +"Wrapper");
xmlSchemaElement.setNillable(true);
sequence.getItems().add(xmlSchemaElement);