/** * Copyright 2007-2011 非也 * All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation。 * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses. * */ package org.firesoa.common.schema; import java.util.HashMap; import java.util.Map; import javax.xml.namespace.QName; /** * 维护java类型与XSD类型,java.sql.Types类型与XSD类型之间的映射 * @author 非也 nychen2000@163.com * */ public class DataMapper { public static final String URI_2001_SCHEMA_XSD = "http://www.w3.org/2001/XMLSchema"; public static final Map<Integer,String> SQLTYPES_2_XSD_LOCALNAME_MAP = new HashMap<Integer,String>(); public static final Map<Integer,QName> SQLTYPES_2_XSD_QNAME_MAP = new HashMap<Integer,QName>(); public static final Map<String, String> XSD_2_JAVA_MAP; public static final Map<String, Class<?>> HOLDER_TYPES_MAP; static{ //初始化java.sql.Types类型与XSD类型之间的映射 SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.CHAR , "string"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.VARCHAR, "string"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.LONGVARCHAR, "string"); //SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.NCHAR , "string"); //SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.NVARCHAR, "string"); //SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.LONGNVARCHAR, "string"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.NUMERIC, "decimal"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.DECIMAL, "decimal"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.BOOLEAN , "boolean"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.BIT , "boolean"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.TINYINT , "byte"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.SMALLINT , "short"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.INTEGER , "int"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.BIGINT , "long"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.REAL , "float"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.FLOAT , "double"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.DOUBLE , "double"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.BINARY , "base64Binary"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.VARBINARY , "base64Binary"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.LONGVARBINARY , "base64Binary"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.BLOB , "base64Binary"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.CLOB , "base64Binary"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.DATE , "date"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.TIME , "time"); SQLTYPES_2_XSD_LOCALNAME_MAP.put(java.sql.Types.TIMESTAMP , "dateTime"); } static { QName qstring = new QName (URI_2001_SCHEMA_XSD, "string"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.CHAR ,qstring); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.VARCHAR, qstring); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.LONGVARCHAR, qstring); //SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.NCHAR , qstring); //SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.NVARCHAR, qstring); //SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.LONGNVARCHAR, qstring); QName qdecimal = new QName(URI_2001_SCHEMA_XSD,"decimal"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.NUMERIC, qdecimal); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.DECIMAL, qdecimal); QName qboolean = new QName(URI_2001_SCHEMA_XSD,"boolean"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.BOOLEAN , qboolean); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.BIT , qboolean); QName qbyte = new QName(URI_2001_SCHEMA_XSD,"byte"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.TINYINT , qbyte); QName qshort = new QName(URI_2001_SCHEMA_XSD,"short"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.SMALLINT , qshort); QName qint = new QName(URI_2001_SCHEMA_XSD,"int"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.INTEGER , qint); QName qlong = new QName(URI_2001_SCHEMA_XSD,"qlong"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.BIGINT , qlong); QName qfloat = new QName(URI_2001_SCHEMA_XSD,"float"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.REAL , qfloat); QName qdouble = new QName(URI_2001_SCHEMA_XSD,"double"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.FLOAT , qdouble); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.DOUBLE , qdouble); QName qbase64Binary = new QName(URI_2001_SCHEMA_XSD,"base64Binary"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.BINARY , qbase64Binary); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.VARBINARY ,qbase64Binary); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.LONGVARBINARY , qbase64Binary); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.BLOB , qbase64Binary); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.CLOB , qbase64Binary); QName qdate = new QName(URI_2001_SCHEMA_XSD,"date"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.DATE , qdate); QName qtime = new QName(URI_2001_SCHEMA_XSD,"time"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.TIME , qtime); QName qdateTime = new QName(URI_2001_SCHEMA_XSD,"dateTime"); SQLTYPES_2_XSD_QNAME_MAP.put(java.sql.Types.TIMESTAMP , qdateTime); } static { XSD_2_JAVA_MAP = new HashMap<String, String>(); XSD_2_JAVA_MAP.put("string", "java.lang.String"); XSD_2_JAVA_MAP.put("integer", "java.math.BigInteger"); XSD_2_JAVA_MAP.put("int", "int"); XSD_2_JAVA_MAP.put("long", "long"); XSD_2_JAVA_MAP.put("short", "short"); XSD_2_JAVA_MAP.put("decimal", "java.math.BigDecimal"); XSD_2_JAVA_MAP.put("float", "float"); XSD_2_JAVA_MAP.put("double", "double"); XSD_2_JAVA_MAP.put("boolean", "boolean"); XSD_2_JAVA_MAP.put("byte", "byte"); XSD_2_JAVA_MAP.put("QName", "javax.xml.namespace.QName"); XSD_2_JAVA_MAP.put("dateTime", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("base64Binary", "byte[]"); XSD_2_JAVA_MAP.put("hexBinary", "byte[]"); XSD_2_JAVA_MAP.put("unsignedInt", "long"); XSD_2_JAVA_MAP.put("unsignedShort", "short"); XSD_2_JAVA_MAP.put("unsignedByte", "byte"); XSD_2_JAVA_MAP.put("time", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("date", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("gYear", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("gYearMonth", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("gMonth", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("gMonthDay", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("gDay", "javax.xml.datatype.XMLGregorianCalendar"); XSD_2_JAVA_MAP.put("duration", "javax.xml.datatype.Duration"); XSD_2_JAVA_MAP.put("NOTATION", "javax.xml.namespace.QName"); XSD_2_JAVA_MAP.put("string", "java.lang.String"); HOLDER_TYPES_MAP = new HashMap<String, Class<?>>(); HOLDER_TYPES_MAP.put("int", java.lang.Integer.class); HOLDER_TYPES_MAP.put("long", java.lang.Long.class); HOLDER_TYPES_MAP.put("short", java.lang.Short.class); HOLDER_TYPES_MAP.put("float", java.lang.Float.class); HOLDER_TYPES_MAP.put("double", java.lang.Double.class); HOLDER_TYPES_MAP.put("boolean", java.lang.Boolean.class); HOLDER_TYPES_MAP.put("byte", java.lang.Byte.class); } }