blob: 7547805c6dcc919264fe6ab6648b5b7eb096cc3d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.description.java2wsdl;
import org.apache.axiom.om.OMElement;
import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Vector;
public class TypeTable {
private static HashMap simpleTypetoxsd;
public static final QName ANY_TYPE = new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "anyType", "xs");
private HashMap complexTypeMap;
public TypeTable() {
//complex type table is resetted every time this is
//instantiated
complexTypeMap = new HashMap();
}
/* statically populate the simple type map - this is not likely to
* change and we need not populate it over and over */
static{
populateSimpleTypes();
}
/* populate the simpletype hashmap */
private static void populateSimpleTypes() {
simpleTypetoxsd = new HashMap();
//todo pls use the types from org.apache.ws.commons.schema.constants.Constants
simpleTypetoxsd.put("int",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "int", "xs"));
simpleTypetoxsd.put("java.lang.String",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "string", "xs"));
simpleTypetoxsd.put("boolean",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "boolean", "xs"));
simpleTypetoxsd.put("float",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "float", "xs"));
simpleTypetoxsd.put("double",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "double", "xs"));
simpleTypetoxsd.put("short",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "short", "xs"));
simpleTypetoxsd.put("long",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "long", "xs"));
simpleTypetoxsd.put("byte",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "byte", "xs"));
simpleTypetoxsd.put("char",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "string", "xs"));
simpleTypetoxsd.put("java.lang.Integer",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "int", "xs"));
simpleTypetoxsd.put("java.lang.Double",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "double", "xs"));
simpleTypetoxsd.put("java.lang.Float",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "float", "xs"));
simpleTypetoxsd.put("java.lang.Long",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "long", "xs"));
simpleTypetoxsd.put("java.lang.Character",
ANY_TYPE);
simpleTypetoxsd.put("java.lang.Boolean",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "boolean", "xs"));
simpleTypetoxsd.put("java.lang.Byte",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "byte", "xs"));
simpleTypetoxsd.put("java.lang.Short",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "short", "xs"));
simpleTypetoxsd.put("java.util.Date",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "date", "xs"));
simpleTypetoxsd.put("java.util.Calendar",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "dateTime", "xs"));
// SQL date time
simpleTypetoxsd.put("java.sql.Date",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "date", "xs"));
simpleTypetoxsd.put("java.sql.Time",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "time", "xs"));
simpleTypetoxsd.put("java.sql.Timestamp",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "dateTime", "xs"));
//consider BigDecimal, BigInteger, Day, Duration, Month, MonthDay,
//Time, Year, YearMonth as SimpleType as well
simpleTypetoxsd.put("java.math.BigDecimal",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "decimal", "xs"));
simpleTypetoxsd.put("java.math.BigInteger",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "integer", "xs"));
simpleTypetoxsd.put("org.apache.axis2.databinding.types.Day",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "gDay", "xs"));
simpleTypetoxsd.put("org.apache.axis2.databinding.types.Duration",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "duration", "xs"));
simpleTypetoxsd.put("org.apache.axis2.databinding.types.Month",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "gMonth", "xs"));
simpleTypetoxsd.put("org.apache.axis2.databinding.types.MonthDay",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "gMonthDay", "xs"));
simpleTypetoxsd.put("org.apache.axis2.databinding.types.Time",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "time", "xs"));
simpleTypetoxsd.put("org.apache.axis2.databinding.types.Year",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "gYear", "xs"));
simpleTypetoxsd.put("org.apache.axis2.databinding.types.YearMonth",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "gYearMonth", "xs"));
simpleTypetoxsd.put("java.lang.Object",
ANY_TYPE);
// Any types
simpleTypetoxsd.put(OMElement.class.getName(),
ANY_TYPE);
simpleTypetoxsd.put(ArrayList.class.getName(),
ANY_TYPE);
simpleTypetoxsd.put(Vector.class.getName(),
ANY_TYPE);
simpleTypetoxsd.put(List.class.getName(),
ANY_TYPE);
simpleTypetoxsd.put(HashMap.class.getName(),
ANY_TYPE);
simpleTypetoxsd.put(Hashtable.class.getName(),
ANY_TYPE);
//byteArrat
simpleTypetoxsd.put("base64Binary",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "base64Binary", "xs"));
}
/**
* Return the schema type QName given the type class name
* @param typeName the name of the type
* @return the name of the simple type or null if it is not a simple type
*/
public QName getSimpleSchemaTypeName(String typeName) {
QName qName = (QName) simpleTypetoxsd.get(typeName);
if(qName == null){
if((typeName.startsWith("java.lang")||typeName.startsWith("javax.")) &&
!Exception.class.getName().equals(typeName)){
return ANY_TYPE;
}
}
return qName;
}
/**
* Return whether the given type is a simple type or not
* @param typeName the name of the type
* @return true if the type is a simple type
*/
public boolean isSimpleType(String typeName) {
if (simpleTypetoxsd.keySet().contains(typeName)){
return true;
}else if(typeName.startsWith("java.lang")||typeName.startsWith("javax.")){
return true;
}
return false;
}
/**
* Return the complex type map
* @return the map with complex types
*/
public Map getComplexSchemaMap() {
return complexTypeMap;
}
public void addComplexSchema(String name, QName schemaType) {
complexTypeMap.put(name, schemaType);
}
public QName getComplexSchemaType(String name) {
return (QName) complexTypeMap.get(name);
}
/**
* Get the qname for a type
* first try the simple types if not try the complex types
* @param typeName name of the type
* @return the Qname for this type
*/
public QName getQNamefortheType(String typeName) {
QName type = getSimpleSchemaTypeName(typeName);
if (type == null) {
type = getComplexSchemaType(typeName);
}
return type;
}
}