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 ch...@apache.org on 2006/10/10 07:56:02 UTC
svn commit: r454632 [1/2] - in
/webservices/axis2/branches/java/1_1/modules/adb-codegen/src/org/apache/axis2/schema:
ExtensionUtility.java template/ADBBeanTemplate.xsl
Author: chinthaka
Date: Mon Oct 9 22:56:02 2006
New Revision: 454632
URL: http://svn.apache.org/viewvc?view=rev&rev=454632
Log:
Applying the patch in http://issues.apache.org/jira/browse/AXIS2-1254. Thanks Amila.
Modified:
webservices/axis2/branches/java/1_1/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java
webservices/axis2/branches/java/1_1/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
Modified: webservices/axis2/branches/java/1_1/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_1/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java?view=diff&rev=454632&r1=454631&r2=454632
==============================================================================
--- webservices/axis2/branches/java/1_1/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java (original)
+++ webservices/axis2/branches/java/1_1/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java Mon Oct 9 22:56:02 2006
@@ -1,417 +1,431 @@
-package org.apache.axis2.schema;
-
-import org.apache.axis2.description.AxisMessage;
-import org.apache.axis2.description.AxisOperation;
-import org.apache.axis2.description.AxisService;
-import org.apache.axis2.wsdl.WSDLConstants;
-import org.apache.axis2.wsdl.WSDLUtil;
-import org.apache.axis2.wsdl.codegen.CodeGenConfiguration;
-import org.apache.axis2.wsdl.databinding.DefaultTypeMapper;
-import org.apache.axis2.wsdl.databinding.JavaTypeMapper;
-import org.apache.axis2.wsdl.databinding.TypeMapper;
-import org.apache.axis2.wsdl.util.Constants;
-import org.apache.ws.commons.schema.*;
-
-import javax.xml.namespace.QName;
-import java.io.File;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-/*
- * 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.
- */
-
-/**
- * This is the utility for the extension to call by reflection.
- */
-public class ExtensionUtility {
-
- public static void invoke(CodeGenConfiguration configuration) throws Exception {
- List schemaList = configuration.getAxisService().getSchema();
-
- //hashmap that keeps the targetnamespace and the xmlSchema object
- //this is a convenience to locate the relevant schema quickly
- //by looking at the target namespace
- Map schemaMap = new HashMap();
- populateSchemaMap(schemaMap, schemaList);
-
- if (schemaList == null || schemaList.isEmpty()) {
- //there are no types to be code generated
- //However if the type mapper is left empty it will be a problem for the other
- //processes. Hence the default type mapper is set to the configuration
- configuration.setTypeMapper(new DefaultTypeMapper());
- return;
- }
- //call the schema compiler
- CompilerOptions options = new CompilerOptions();
-
- //set the default options
- populateDefaultOptions(options, configuration);
-
- //set the user parameters. the user parameters get the preference over
- //the default ones. But the user better know what he's doing if he
- //used module specific parameters
- populateUserparameters(options, configuration);
-
- SchemaCompiler schemaCompiler = new SchemaCompiler(options);
- // run the schema compiler
- schemaCompiler.compile(schemaList);
-
- //create the type mapper
- //First try to take the one that is already there
- TypeMapper mapper = configuration.getTypeMapper();
- if (mapper == null) {
- mapper = new JavaTypeMapper();
- }
-
- if (options.isWriteOutput()) {
- //get the processed element map and transfer it to the type mapper
- Map processedMap = schemaCompiler.getProcessedElementMap();
- Iterator processedkeys = processedMap.keySet().iterator();
- QName qNameKey;
- while (processedkeys.hasNext()) {
- qNameKey = (QName) processedkeys.next();
- mapper.addTypeMappingName(qNameKey, processedMap.get(qNameKey).toString());
- }
-
- } else {
- //get the processed model map and transfer it to the type mapper
- //since the options mentiond that its not writable, it should have
- //populated the model map
- Map processedModelMap = schemaCompiler.getProcessedModelMap();
- Iterator processedkeys = processedModelMap.keySet().iterator();
- QName qNameKey;
- while (processedkeys.hasNext()) {
- qNameKey = (QName) processedkeys.next();
- mapper.addTypeMappingObject(qNameKey, processedModelMap.get(qNameKey));
- }
-
- Map processedMap = schemaCompiler.getProcessedElementMap();
- processedkeys = processedMap.keySet().iterator();
- while (processedkeys.hasNext()) {
- qNameKey = (QName) processedkeys.next();
- mapper.addTypeMappingName(qNameKey, processedMap.get(qNameKey).toString());
- }
-
- //get the ADB template from the schema compilers property bag and set the
- //template
- configuration.putProperty(Constants.EXTERNAL_TEMPLATE_PROPERTY_KEY,
- schemaCompiler.getCompilerProperties().getProperty(
- SchemaConstants.SchemaPropertyNames.BEAN_WRITER_TEMPLATE_KEY));
-
- }
-
- //process the unwrapped parameters
- if (!configuration.isParametersWrapped()) {
- //figure out the unwrapped operations
- AxisService axisService = configuration.getAxisService();
-
- for (Iterator operations = axisService.getOperations();
- operations.hasNext();) {
- AxisOperation op = (AxisOperation) operations.next();
- if (WSDLUtil.isInputPresentForMEP(op.getMessageExchangePattern())) {
- walkSchema(op.getMessage(
- WSDLConstants.MESSAGE_LABEL_IN_VALUE),
- mapper,
- schemaMap,
- op.getName().getLocalPart());
- }
-
-
- }
- }
-
- //set the type mapper to the config
- configuration.setTypeMapper(mapper);
-
- }
-
- /**
- * Populate the schema objects into the
- *
- * @param schemaMap
- * @param schemaList
- */
- private static void populateSchemaMap(Map schemaMap, List schemaList) {
- for (int i = 0; i < schemaList.size(); i++) {
- XmlSchema xmlSchema = (XmlSchema) schemaList.get(i);
- schemaMap.put(xmlSchema.getTargetNamespace(), xmlSchema);
- }
- }
-
- /**
- * @param message
- * @param mapper
- */
- private static void walkSchema(AxisMessage message,
- TypeMapper mapper,
- Map schemaMap,
- String opName) {
-
- if (message.getParameter(Constants.UNWRAPPED_KEY) != null) {
- XmlSchemaType schemaType = message.getSchemaElement().getSchemaType();
- //create a type mapper
- processXMLSchemaComplexType(schemaType, mapper, opName, schemaMap);
- }
- }
-
- private static void processXMLSchemaComplexType(XmlSchemaType schemaType, TypeMapper mapper, String opName, Map schemaMap) {
- if (schemaType instanceof XmlSchemaComplexType) {
- XmlSchemaComplexType cmplxType = (XmlSchemaComplexType) schemaType;
- if (cmplxType.getContentModel() == null) {
- processSchemaSequence(cmplxType.getParticle(), mapper, opName, schemaMap);
- } else {
- processComplexContentModel(cmplxType, mapper, opName, schemaMap);
- }
- }
- }
-
- private static void processComplexContentModel(XmlSchemaComplexType cmplxType, TypeMapper mapper, String opName, Map schemaMap) {
- XmlSchemaContentModel contentModel = cmplxType.getContentModel();
- if (contentModel instanceof XmlSchemaComplexContent) {
- XmlSchemaComplexContent xmlSchemaComplexContent = (XmlSchemaComplexContent) contentModel;
- XmlSchemaContent content = xmlSchemaComplexContent.getContent();
- if (content instanceof XmlSchemaComplexContentExtension) {
- XmlSchemaComplexContentExtension schemaExtension = (XmlSchemaComplexContentExtension) content;
-
- // process particles inside this extension, if any
- processSchemaSequence(schemaExtension.getParticle(), mapper, opName, schemaMap);
-
- // now we need to get the schema of the extension type from the parent schema. For that let's first retrieve
- // the parent schema
- XmlSchema parentSchema = (XmlSchema) schemaMap.get(schemaExtension.getBaseTypeName().getNamespaceURI());
-
- // ok now we got the parent schema. Now let's get the extension's schema type
-
- XmlSchemaType extensionSchemaType = parentSchema.getTypeByName(schemaExtension.getBaseTypeName());
-
- processXMLSchemaComplexType(extensionSchemaType, mapper, opName, schemaMap);
- }
- }
- }
-
- private static void processSchemaSequence(XmlSchemaParticle particle, TypeMapper mapper, String opName, Map schemaMap) {
- if (particle instanceof XmlSchemaSequence) {
- XmlSchemaObjectCollection items =
- ((XmlSchemaSequence) particle).getItems();
- for (Iterator i = items.getIterator(); i.hasNext();) {
- Object item = i.next();
- // get each and every element in the sequence and
- // traverse through them
- if (item instanceof XmlSchemaElement) {
- //populate the map with the partname - class name
- //attached to the schema element
- XmlSchemaElement xmlSchemaElement = (XmlSchemaElement) item;
- XmlSchemaType eltSchemaType = xmlSchemaElement.getSchemaType();
- if (eltSchemaType != null) {
- //there is a schema type object.We can utilize that
- populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement);
- } else if (xmlSchemaElement.getSchemaTypeName() != null) {
- //there is no schema type object but there is a
- //schema type QName. Use that Qname to look up the
- //schematype in other schema objects
- eltSchemaType = findSchemaType(schemaMap,
- xmlSchemaElement.getSchemaTypeName());
- if (eltSchemaType != null) {
- populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement);
- }
- }
- } else if (item instanceof XmlSchemaAny) {
-
- // if this is an instance of xs:any, then there is no part name for it. Using ANY_ELEMENT_FIELD_NAME
- // for it for now
-
- //we have to handle both maxoccurs 1 and maxoccurs > 1 situation
- XmlSchemaAny xmlSchemaAny = (XmlSchemaAny) item;
-
- QName partQName = WSDLUtil.getPartQName(opName,
- WSDLConstants.INPUT_PART_QNAME_SUFFIX,
- Constants.ANY_ELEMENT_FIELD_NAME);
-
- if (((XmlSchemaAny) item).getMaxOccurs() > 1) {
- mapper.addTypeMappingName(partQName, "org.apache.axiom.om.OMElement[]");
- } else {
- mapper.addTypeMappingName(partQName, "org.apache.axiom.om.OMElement");
- }
-
- }
-
- }
-
- }
- }
-
- /**
- * Util method to populate the class name into the typeMap
- *
- * @param eltSchemaType
- */
- private static void populateClassName(XmlSchemaType eltSchemaType,
- TypeMapper typeMap,
- String opName,
- XmlSchemaElement xmlSchemaElement) {
-
- boolean isArray = xmlSchemaElement.getMaxOccurs() > 1;
-
- Map metaInfoMap = eltSchemaType.getMetaInfoMap();
-
- if (metaInfoMap != null) {
- String className = (String) metaInfoMap.
- get(SchemaConstants.SchemaCompilerInfoHolder.CLASSNAME_KEY);
-
- // this is a temporary patch
- // the acual problem is keeping the class name details on the schemaType in
- // XmlSchema compiler.
- // we have to store them in XmlElement
- if (isArray && !className.endsWith("[]")) {
- className += "[]";
- } else if (!isArray && className.endsWith("[]")){
- className = className.substring(0,className.length() - 2);
- }
-
- QName partQName = WSDLUtil.getPartQName(opName,
- WSDLConstants.INPUT_PART_QNAME_SUFFIX,
- xmlSchemaElement.getName());
- typeMap.addTypeMappingName(partQName, className);
- if (Boolean.TRUE.equals(
- metaInfoMap.get(SchemaConstants.
- SchemaCompilerInfoHolder.CLASSNAME_PRIMITVE_KEY))) {
-
- //this type is primitive - add that to the type mapper status
- //for now lets add a boolean
- typeMap.addTypeMappingStatus(partQName, Boolean.TRUE);
- }
-
- }
- }
-
- /**
- * Look for a given schema type given the schema type Qname
- *
- * @param schemaMap
- * @return null if the schema is not found
- */
- private static XmlSchemaType findSchemaType(Map schemaMap, QName schemaTypeName) {
- //find the schema
- XmlSchema schema = (XmlSchema) schemaMap.get(schemaTypeName.getNamespaceURI());
- if (schema != null) {
- return schema.getTypeByName(schemaTypeName);
- }
- return null;
- }
-
- /**
- * populate parameters from the user
- *
- * @param options
- */
- private static void populateUserparameters(CompilerOptions options, CodeGenConfiguration configuration) {
- Map propertyMap = configuration.getProperties();
- if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.WRAP_SCHEMA_CLASSES)) {
- if (Boolean.valueOf(
- propertyMap.get(SchemaConstants.SchemaCompilerArguments.WRAP_SCHEMA_CLASSES).toString()).
- booleanValue()) {
- options.setWrapClasses(true);
- } else {
- options.setWrapClasses(false);
- }
- }
-
- if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.WRITE_SCHEMA_CLASSES)) {
- if (Boolean.valueOf(
- propertyMap.get(SchemaConstants.SchemaCompilerArguments.WRITE_SCHEMA_CLASSES).toString()).
- booleanValue()) {
- options.setWriteOutput(true);
- } else {
- options.setWriteOutput(false);
- }
- }
-
- // add the custom package name
- if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.PACKAGE)) {
- String packageName = (String) propertyMap.get(SchemaConstants.SchemaCompilerArguments.PACKAGE);
- if (packageName != null || !"".equals(packageName)) {
- options.setPackageName(packageName);
- }
-
- }
-
- //add custom mapper package name
- if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.MAPPER_PACKAGE)) {
- String packageName = (String) propertyMap.get(SchemaConstants.SchemaCompilerArguments.MAPPER_PACKAGE);
- if (packageName != null || !"".equals(packageName)) {
- options.setMapperClassPackage(packageName);
- }
-
- }
-
- //set helper mode
- //this becomes effective only if the classes are unpacked
- if (!options.isWrapClasses()) {
- if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.HELPER_MODE)) {
- options.setHelperMode(true);
- }
- }
- }
-
-
- /**
- * populate the default options - called before the applying of user parameters
- *
- * @param options
- */
- private static void populateDefaultOptions(CompilerOptions options,
- CodeGenConfiguration configuration) {
- //create the output directory
- File outputDir = configuration.isFlattenFiles() ?
- configuration.getOutputLocation() :
- new File(configuration.getOutputLocation(), configuration.getSourceLocation());
-
- if (!outputDir.exists()) {
- outputDir.mkdirs();
- }
-
- /// these options need to be taken from the command line
- options.setOutputLocation(outputDir);
- options.setNs2PackageMap(configuration.getUri2PackageNameMap() == null ?
- new HashMap() :
- configuration.getUri2PackageNameMap());
-
- //default setting is to set the wrap status depending on whether it's
- //the server side or the client side
- if (configuration.isServerSide()) {
- //for the serverside we generate unwrapped by default
- options.setWrapClasses(false);
- //for the serverside we write the output by default
- options.setWriteOutput(true);
- } else {
- // for the client let the users preference be the word here
- options.setWrapClasses(configuration.isPackClasses());
- //for the client side the default setting is not to write the
- //output
- options.setWriteOutput(!configuration.isPackClasses());
- }
-
- if (configuration.isGenerateAll()) {
- options.setGenerateAll(true);
- }
-
- if (configuration.isBackwordCompatibilityMode()) {
- options.setBackwordCompatibilityMode(true);
- }
- }
-
-}
+package org.apache.axis2.schema;
+
+import org.apache.axis2.description.AxisMessage;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.axis2.wsdl.WSDLUtil;
+import org.apache.axis2.wsdl.codegen.CodeGenConfiguration;
+import org.apache.axis2.wsdl.databinding.DefaultTypeMapper;
+import org.apache.axis2.wsdl.databinding.JavaTypeMapper;
+import org.apache.axis2.wsdl.databinding.TypeMapper;
+import org.apache.axis2.wsdl.util.Constants;
+import org.apache.ws.commons.schema.*;
+
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+/*
+ * 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.
+ */
+
+/**
+ * This is the utility for the extension to call by reflection.
+ */
+public class ExtensionUtility {
+
+
+ public static void invoke(CodeGenConfiguration configuration) throws Exception {
+ List schemaList = configuration.getAxisService().getSchema();
+
+ //hashmap that keeps the targetnamespace and the xmlSchema object
+ //this is a convenience to locate the relevant schema quickly
+ //by looking at the target namespace
+ Map schemaMap = new HashMap();
+ populateSchemaMap(schemaMap, schemaList);
+
+ if (schemaList == null || schemaList.isEmpty()) {
+ //there are no types to be code generated
+ //However if the type mapper is left empty it will be a problem for the other
+ //processes. Hence the default type mapper is set to the configuration
+ configuration.setTypeMapper(new DefaultTypeMapper());
+ return;
+ }
+ //call the schema compiler
+ CompilerOptions options = new CompilerOptions();
+
+ //set the default options
+ populateDefaultOptions(options, configuration);
+
+ //set the user parameters. the user parameters get the preference over
+ //the default ones. But the user better know what he's doing if he
+ //used module specific parameters
+ populateUserparameters(options, configuration);
+
+ SchemaCompiler schemaCompiler = new SchemaCompiler(options);
+ // run the schema compiler
+ schemaCompiler.compile(schemaList);
+
+ //create the type mapper
+ //First try to take the one that is already there
+ TypeMapper mapper = configuration.getTypeMapper();
+ if (mapper == null) {
+ mapper = new JavaTypeMapper();
+ }
+
+ if (options.isWriteOutput()) {
+ //get the processed element map and transfer it to the type mapper
+ Map processedMap = schemaCompiler.getProcessedElementMap();
+ Iterator processedkeys = processedMap.keySet().iterator();
+ QName qNameKey;
+ while (processedkeys.hasNext()) {
+ qNameKey = (QName) processedkeys.next();
+ mapper.addTypeMappingName(qNameKey, processedMap.get(qNameKey).toString());
+ }
+
+ } else {
+ //get the processed model map and transfer it to the type mapper
+ //since the options mentiond that its not writable, it should have
+ //populated the model map
+ Map processedModelMap = schemaCompiler.getProcessedModelMap();
+ Iterator processedkeys = processedModelMap.keySet().iterator();
+ QName qNameKey;
+ while (processedkeys.hasNext()) {
+ qNameKey = (QName) processedkeys.next();
+ mapper.addTypeMappingObject(qNameKey, processedModelMap.get(qNameKey));
+ }
+
+ Map processedMap = schemaCompiler.getProcessedElementMap();
+ processedkeys = processedMap.keySet().iterator();
+ while (processedkeys.hasNext()) {
+ qNameKey = (QName) processedkeys.next();
+ mapper.addTypeMappingName(qNameKey, processedMap.get(qNameKey).toString());
+ }
+
+ //get the ADB template from the schema compilers property bag and set the
+ //template
+ configuration.putProperty(Constants.EXTERNAL_TEMPLATE_PROPERTY_KEY,
+ schemaCompiler.getCompilerProperties().getProperty(
+ SchemaConstants.SchemaPropertyNames.BEAN_WRITER_TEMPLATE_KEY));
+
+ }
+
+ //process the unwrapped parameters
+ if (!configuration.isParametersWrapped()) {
+ //figure out the unwrapped operations
+ AxisService axisService = configuration.getAxisService();
+
+ for (Iterator operations = axisService.getOperations();
+ operations.hasNext();) {
+ AxisOperation op = (AxisOperation) operations.next();
+ if (WSDLUtil.isInputPresentForMEP(op.getMessageExchangePattern())) {
+ walkSchema(op.getMessage(
+ WSDLConstants.MESSAGE_LABEL_IN_VALUE),
+ mapper,
+ schemaMap,
+ op.getName().getLocalPart());
+ }
+
+
+ }
+ }
+
+ //set the type mapper to the config
+ configuration.setTypeMapper(mapper);
+
+ }
+
+ /**
+ * Populate the schema objects into the
+ *
+ * @param schemaMap
+ * @param schemaList
+ */
+ private static void populateSchemaMap(Map schemaMap, List schemaList) {
+ for (int i = 0; i < schemaList.size(); i++) {
+ XmlSchema xmlSchema = (XmlSchema) schemaList.get(i);
+ schemaMap.put(xmlSchema.getTargetNamespace(), xmlSchema);
+ }
+ }
+
+ /**
+ * @param message
+ * @param mapper
+ */
+ private static void walkSchema(AxisMessage message,
+ TypeMapper mapper,
+ Map schemaMap,
+ String opName) {
+
+ if (message.getParameter(Constants.UNWRAPPED_KEY) != null) {
+ XmlSchemaType schemaType = message.getSchemaElement().getSchemaType();
+ //create a type mapper
+ processXMLSchemaComplexType(schemaType, mapper, opName, schemaMap);
+ }
+ }
+
+ private static void processXMLSchemaComplexType(XmlSchemaType schemaType, TypeMapper mapper, String opName, Map schemaMap) {
+ if (schemaType instanceof XmlSchemaComplexType) {
+ XmlSchemaComplexType cmplxType = (XmlSchemaComplexType) schemaType;
+ if (cmplxType.getContentModel() == null) {
+ processSchemaSequence(cmplxType.getParticle(), mapper, opName, schemaMap);
+ } else {
+ processComplexContentModel(cmplxType, mapper, opName, schemaMap);
+ }
+ }
+ }
+
+ private static void processComplexContentModel(XmlSchemaComplexType cmplxType, TypeMapper mapper, String opName, Map schemaMap) {
+ XmlSchemaContentModel contentModel = cmplxType.getContentModel();
+ if (contentModel instanceof XmlSchemaComplexContent) {
+ XmlSchemaComplexContent xmlSchemaComplexContent = (XmlSchemaComplexContent) contentModel;
+ XmlSchemaContent content = xmlSchemaComplexContent.getContent();
+ if (content instanceof XmlSchemaComplexContentExtension) {
+ XmlSchemaComplexContentExtension schemaExtension = (XmlSchemaComplexContentExtension) content;
+
+ // process particles inside this extension, if any
+ processSchemaSequence(schemaExtension.getParticle(), mapper, opName, schemaMap);
+
+ // now we need to get the schema of the extension type from the parent schema. For that let's first retrieve
+ // the parent schema
+ XmlSchema parentSchema = (XmlSchema) schemaMap.get(schemaExtension.getBaseTypeName().getNamespaceURI());
+
+ // ok now we got the parent schema. Now let's get the extension's schema type
+
+ XmlSchemaType extensionSchemaType = parentSchema.getTypeByName(schemaExtension.getBaseTypeName());
+
+ processXMLSchemaComplexType(extensionSchemaType, mapper, opName, schemaMap);
+ }
+ }
+ }
+
+ private static void processSchemaSequence(XmlSchemaParticle particle, TypeMapper mapper, String opName, Map schemaMap) {
+ if (particle instanceof XmlSchemaSequence) {
+ XmlSchemaObjectCollection items =
+ ((XmlSchemaSequence) particle).getItems();
+ for (Iterator i = items.getIterator(); i.hasNext();) {
+ Object item = i.next();
+ // get each and every element in the sequence and
+ // traverse through them
+ if (item instanceof XmlSchemaElement) {
+ //populate the map with the partname - class name
+ //attached to the schema element
+ XmlSchemaElement xmlSchemaElement = (XmlSchemaElement) item;
+ XmlSchemaType eltSchemaType = xmlSchemaElement.getSchemaType();
+ if (eltSchemaType != null) {
+ //there is a schema type object.We can utilize that
+ populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement);
+ } else if (xmlSchemaElement.getSchemaTypeName() != null) {
+ //there is no schema type object but there is a
+ //schema type QName. Use that Qname to look up the
+ //schematype in other schema objects
+ eltSchemaType = findSchemaType(schemaMap,
+ xmlSchemaElement.getSchemaTypeName());
+ if (eltSchemaType != null) {
+ populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement);
+ } else if (xmlSchemaElement.getSchemaTypeName().equals(SchemaConstants.XSD_ANYTYPE)) {
+ QName partQName = WSDLUtil.getPartQName(opName,
+ WSDLConstants.INPUT_PART_QNAME_SUFFIX,
+ xmlSchemaElement.getName());
+
+ if (xmlSchemaElement.getMaxOccurs() > 1) {
+ mapper.addTypeMappingName(partQName, "org.apache.axiom.om.OMElement[]");
+ } else {
+ mapper.addTypeMappingName(partQName, "org.apache.axiom.om.OMElement");
+ }
+ }
+ }
+ } else if (item instanceof XmlSchemaAny) {
+
+ // if this is an instance of xs:any, then there is no part name for it. Using ANY_ELEMENT_FIELD_NAME
+ // for it for now
+
+ //we have to handle both maxoccurs 1 and maxoccurs > 1 situation
+ XmlSchemaAny xmlSchemaAny = (XmlSchemaAny) item;
+
+ QName partQName = WSDLUtil.getPartQName(opName,
+ WSDLConstants.INPUT_PART_QNAME_SUFFIX,
+ Constants.ANY_ELEMENT_FIELD_NAME);
+
+ if (((XmlSchemaAny) item).getMaxOccurs() > 1) {
+ mapper.addTypeMappingName(partQName, "org.apache.axiom.om.OMElement[]");
+ } else {
+ mapper.addTypeMappingName(partQName, "org.apache.axiom.om.OMElement");
+ }
+
+ }
+
+ }
+
+ }
+ }
+
+ // private static void
+
+ /**
+ * Util method to populate the class name into the typeMap
+ *
+ * @param eltSchemaType
+ */
+ private static void populateClassName(XmlSchemaType eltSchemaType,
+ TypeMapper typeMap,
+ String opName,
+ XmlSchemaElement xmlSchemaElement) {
+
+ boolean isArray = xmlSchemaElement.getMaxOccurs() > 1;
+
+ Map metaInfoMap = eltSchemaType.getMetaInfoMap();
+
+ if (metaInfoMap != null) {
+ String className = (String) metaInfoMap.
+ get(SchemaConstants.SchemaCompilerInfoHolder.CLASSNAME_KEY);
+
+ // this is a temporary patch
+ // the acual problem is keeping the class name details on the schemaType in
+ // XmlSchema compiler.
+ // we have to store them in XmlElement
+ if (isArray && !className.endsWith("[]")) {
+ className += "[]";
+ } else if (!isArray && className.endsWith("[]")) {
+ className = className.substring(0, className.length() - 2);
+ }
+
+
+ QName partQName = WSDLUtil.getPartQName(opName,
+ WSDLConstants.INPUT_PART_QNAME_SUFFIX,
+ xmlSchemaElement.getName());
+ typeMap.addTypeMappingName(partQName, className);
+ if (Boolean.TRUE.equals(
+ metaInfoMap.get(SchemaConstants.
+ SchemaCompilerInfoHolder.CLASSNAME_PRIMITVE_KEY))) {
+
+ //this type is primitive - add that to the type mapper status
+ //for now lets add a boolean
+ typeMap.addTypeMappingStatus(partQName, Boolean.TRUE);
+ }
+ }
+ }
+
+
+ /**
+ * Look for a given schema type given the schema type Qname
+ *
+ * @param schemaMap
+ * @return null if the schema is not found
+ */
+ private static XmlSchemaType findSchemaType(Map schemaMap, QName schemaTypeName) {
+ //find the schema
+ XmlSchema schema = (XmlSchema) schemaMap.get(schemaTypeName.getNamespaceURI());
+ if (schema != null) {
+ return schema.getTypeByName(schemaTypeName);
+ }
+ return null;
+ }
+
+ /**
+ * populate parameters from the user
+ *
+ * @param options
+ */
+ private static void populateUserparameters(CompilerOptions options, CodeGenConfiguration configuration) {
+ Map propertyMap = configuration.getProperties();
+ if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.WRAP_SCHEMA_CLASSES)) {
+ if (Boolean.valueOf(
+ propertyMap.get(SchemaConstants.SchemaCompilerArguments.WRAP_SCHEMA_CLASSES).toString()).
+ booleanValue()) {
+ options.setWrapClasses(true);
+ } else {
+ options.setWrapClasses(false);
+ }
+ }
+
+ if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.WRITE_SCHEMA_CLASSES)) {
+ if (Boolean.valueOf(
+ propertyMap.get(SchemaConstants.SchemaCompilerArguments.WRITE_SCHEMA_CLASSES).toString()).
+ booleanValue()) {
+ options.setWriteOutput(true);
+ } else {
+ options.setWriteOutput(false);
+ }
+ }
+
+ // add the custom package name
+ if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.PACKAGE)) {
+ String packageName = (String) propertyMap.get(SchemaConstants.SchemaCompilerArguments.PACKAGE);
+ if (packageName != null || !"".equals(packageName)) {
+ options.setPackageName(packageName);
+ }
+
+ }
+
+ //add custom mapper package name
+ if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.MAPPER_PACKAGE)) {
+ String packageName = (String) propertyMap.get(SchemaConstants.SchemaCompilerArguments.MAPPER_PACKAGE);
+ if (packageName != null || !"".equals(packageName)) {
+ options.setMapperClassPackage(packageName);
+ }
+
+ }
+
+ //set helper mode
+ //this becomes effective only if the classes are unpacked
+ if (!options.isWrapClasses()) {
+ if (propertyMap.containsKey(SchemaConstants.SchemaCompilerArguments.HELPER_MODE)) {
+ options.setHelperMode(true);
+ }
+ }
+ }
+
+
+ /**
+ * populate the default options - called before the applying of user parameters
+ *
+ * @param options
+ */
+ private static void populateDefaultOptions(CompilerOptions options,
+ CodeGenConfiguration configuration) {
+ //create the output directory
+ File outputDir = configuration.isFlattenFiles() ?
+ configuration.getOutputLocation() :
+ new File(configuration.getOutputLocation(), configuration.getSourceLocation());
+
+ if (!outputDir.exists()) {
+ outputDir.mkdirs();
+ }
+
+ /// these options need to be taken from the command line
+ options.setOutputLocation(outputDir);
+ options.setNs2PackageMap(configuration.getUri2PackageNameMap() == null ?
+ new HashMap() :
+ configuration.getUri2PackageNameMap());
+
+ //default setting is to set the wrap status depending on whether it's
+ //the server side or the client side
+ if (configuration.isServerSide()) {
+ //for the serverside we generate unwrapped by default
+ options.setWrapClasses(false);
+ //for the serverside we write the output by default
+ options.setWriteOutput(true);
+ } else {
+ // for the client let the users preference be the word here
+ options.setWrapClasses(configuration.isPackClasses());
+ //for the client side the default setting is not to write the
+ //output
+ options.setWriteOutput(!configuration.isPackClasses());
+ }
+
+ if (configuration.isGenerateAll()) {
+ options.setGenerateAll(true);
+ }
+
+ if (configuration.isBackwordCompatibilityMode()) {
+ options.setBackwordCompatibilityMode(true);
+ }
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org