serializerfactory.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 632 行 · 第 1/2 页

JAVA
632
字号
    return deserializer;  }  /**   * Returns the default serializer for a class that isn't matched   * directly.  Application can override this method to produce   * bean-style serialization instead of field serialization.   *   * @param cl the class of the object that needs to be serialized.   *   * @return a serializer object for the serialization.   */  protected Deserializer getDefaultDeserializer(Class cl)  {    return new JavaDeserializer(cl);  }  /**   * Reads the object as a list.   */  public Object readList(AbstractHessianInput in, int length, String type)    throws HessianProtocolException, IOException  {    Deserializer deserializer = getDeserializer(type);    if (deserializer != null)      return deserializer.readList(in, length);    else      return new CollectionDeserializer(ArrayList.class).readList(in, length);  }    /**   * Reads the object as a map.   */  public Object readMap(AbstractHessianInput in, String type)    throws HessianProtocolException, IOException  {    Deserializer deserializer = getDeserializer(type);    if (deserializer != null)      return deserializer.readMap(in);    else if (_hashMapDeserializer != null)      return _hashMapDeserializer.readMap(in);    else {      _hashMapDeserializer = new MapDeserializer(HashMap.class);            return _hashMapDeserializer.readMap(in);    }  }    /**   * Reads the object as a map.   */  public Object readObject(AbstractHessianInput in,			   String type,			   String []fieldNames)    throws HessianProtocolException, IOException  {    Deserializer deserializer = getDeserializer(type);    if (deserializer != null)      return deserializer.readObject(in, fieldNames);    else if (_hashMapDeserializer != null)      return _hashMapDeserializer.readObject(in, fieldNames);    else {      _hashMapDeserializer = new MapDeserializer(HashMap.class);            return _hashMapDeserializer.readObject(in, fieldNames);    }  }  /**   * Reads the object as a map.   */  public Deserializer getObjectDeserializer(String type, Class cl)    throws HessianProtocolException  {    Deserializer reader = getObjectDeserializer(type);        if (cl == null	|| cl.equals(reader.getType())	|| cl.isAssignableFrom(reader.getType())	|| HessianHandle.class.isAssignableFrom(reader.getType())) {      return reader;    }    if (log.isLoggable(Level.FINE)) {      log.fine("hessian: expected '" + cl.getName() + "' at '" + type + "' ("	       + reader.getType().getName() + ")");    }        return getDeserializer(cl);  }    /**   * Reads the object as a map.   */  public Deserializer getObjectDeserializer(String type)    throws HessianProtocolException  {    Deserializer deserializer = getDeserializer(type);    if (deserializer != null)      return deserializer;    else if (_hashMapDeserializer != null)      return _hashMapDeserializer;    else {      _hashMapDeserializer = new MapDeserializer(HashMap.class);            return _hashMapDeserializer;    }  }  /**   * Reads the object as a map.   */  public Deserializer getListDeserializer(String type, Class cl)    throws HessianProtocolException  {    Deserializer reader = getListDeserializer(type);        if (cl == null	|| cl.equals(reader.getType())	|| cl.isAssignableFrom(reader.getType())) {      return reader;    }    if (log.isLoggable(Level.FINE)) {      log.fine("hessian: expected '" + cl.getName() + "' at '" + type + "' ("	       + reader.getType().getName() + ")");    }        return getDeserializer(cl);  }    /**   * Reads the object as a map.   */  public Deserializer getListDeserializer(String type)    throws HessianProtocolException  {    Deserializer deserializer = getDeserializer(type);    if (deserializer != null)      return deserializer;    else if (_arrayListDeserializer != null)      return _arrayListDeserializer;    else {      _arrayListDeserializer = new CollectionDeserializer(ArrayList.class);            return _arrayListDeserializer;    }  }  /**   * Returns a deserializer based on a string type.   */  public Deserializer getDeserializer(String type)    throws HessianProtocolException  {    if (type == null || type.equals(""))      return null;    Deserializer deserializer;        if (_cachedTypeDeserializerMap != null) {      synchronized (_cachedTypeDeserializerMap) {	deserializer = (Deserializer) _cachedTypeDeserializerMap.get(type);      }      if (deserializer != null)	return deserializer;    }    deserializer = (Deserializer) _staticTypeMap.get(type);    if (deserializer != null)      return deserializer;    if (type.startsWith("[")) {      Deserializer subDeserializer = getDeserializer(type.substring(1));      if (subDeserializer != null)        deserializer = new ArrayDeserializer(subDeserializer.getType());      else        deserializer = new ArrayDeserializer(Object.class);    }    else {      ClassLoader loader = Thread.currentThread().getContextClassLoader();            try {	Class cl = Class.forName(type, false, loader);	deserializer = getDeserializer(cl);      } catch (Exception e) {	log.warning("Hessian/Burlap: '" + type + "' is an unknown class in " + loader + ":\n" + e);		log.log(Level.FINER, e.toString(), e);      }    }    if (deserializer != null) {      if (_cachedTypeDeserializerMap == null)	_cachedTypeDeserializerMap = new HashMap(8);      synchronized (_cachedTypeDeserializerMap) {	_cachedTypeDeserializerMap.put(type, deserializer);      }    }    return deserializer;  }  private static void addBasic(Class cl, String typeName, int type)  {    _staticSerializerMap.put(cl, new BasicSerializer(type));    Deserializer deserializer = new BasicDeserializer(type);    _staticDeserializerMap.put(cl, deserializer);    _staticTypeMap.put(typeName, deserializer);  }  static {    _staticSerializerMap = new HashMap();    _staticDeserializerMap = new HashMap();    _staticTypeMap = new HashMap();    addBasic(void.class, "void", BasicSerializer.NULL);        addBasic(Boolean.class, "boolean", BasicSerializer.BOOLEAN);    addBasic(Byte.class, "byte", BasicSerializer.BYTE);    addBasic(Short.class, "short", BasicSerializer.SHORT);    addBasic(Integer.class, "int", BasicSerializer.INTEGER);    addBasic(Long.class, "long", BasicSerializer.LONG);    addBasic(Float.class, "float", BasicSerializer.FLOAT);    addBasic(Double.class, "double", BasicSerializer.DOUBLE);    addBasic(Character.class, "char", BasicSerializer.CHARACTER_OBJECT);    addBasic(String.class, "string", BasicSerializer.STRING);    addBasic(Object.class, "object", BasicSerializer.OBJECT);    addBasic(java.util.Date.class, "date", BasicSerializer.DATE);    addBasic(boolean.class, "boolean", BasicSerializer.BOOLEAN);    addBasic(byte.class, "byte", BasicSerializer.BYTE);    addBasic(short.class, "short", BasicSerializer.SHORT);    addBasic(int.class, "int", BasicSerializer.INTEGER);    addBasic(long.class, "long", BasicSerializer.LONG);    addBasic(float.class, "float", BasicSerializer.FLOAT);    addBasic(double.class, "double", BasicSerializer.DOUBLE);    addBasic(char.class, "char", BasicSerializer.CHARACTER);        addBasic(boolean[].class, "[boolean", BasicSerializer.BOOLEAN_ARRAY);    addBasic(byte[].class, "[byte", BasicSerializer.BYTE_ARRAY);    addBasic(short[].class, "[short", BasicSerializer.SHORT_ARRAY);    addBasic(int[].class, "[int", BasicSerializer.INTEGER_ARRAY);    addBasic(long[].class, "[long", BasicSerializer.LONG_ARRAY);    addBasic(float[].class, "[float", BasicSerializer.FLOAT_ARRAY);    addBasic(double[].class, "[double", BasicSerializer.DOUBLE_ARRAY);    addBasic(char[].class, "[char", BasicSerializer.CHARACTER_ARRAY);    addBasic(String[].class, "[string", BasicSerializer.STRING_ARRAY);    addBasic(Object[].class, "[object", BasicSerializer.OBJECT_ARRAY);    _staticSerializerMap.put(Class.class, new ClassSerializer());    _staticDeserializerMap.put(Class.class, new ClassDeserializer());    _staticDeserializerMap.put(Number.class, new BasicDeserializer(BasicSerializer.NUMBER));        _staticSerializerMap.put(BigDecimal.class, new StringValueSerializer());    try {      _staticDeserializerMap.put(BigDecimal.class,			   new StringValueDeserializer(BigDecimal.class));    } catch (Throwable e) {    }        _staticSerializerMap.put(File.class, new StringValueSerializer());    try {      _staticDeserializerMap.put(File.class,			   new StringValueDeserializer(File.class));    } catch (Throwable e) {    }        _staticSerializerMap.put(ObjectName.class, new StringValueSerializer());    try {      _staticDeserializerMap.put(ObjectName.class,			   new StringValueDeserializer(ObjectName.class));    } catch (Throwable e) {    }        _staticSerializerMap.put(java.sql.Date.class, new SqlDateSerializer());    _staticSerializerMap.put(java.sql.Time.class, new SqlDateSerializer());    _staticSerializerMap.put(java.sql.Timestamp.class, new SqlDateSerializer());        _staticSerializerMap.put(java.io.InputStream.class,			     new InputStreamSerializer());    _staticDeserializerMap.put(java.io.InputStream.class,			       new InputStreamDeserializer());    try {      _staticDeserializerMap.put(java.sql.Date.class,			  new SqlDateDeserializer(java.sql.Date.class));      _staticDeserializerMap.put(java.sql.Time.class,			  new SqlDateDeserializer(java.sql.Time.class));      _staticDeserializerMap.put(java.sql.Timestamp.class,			  new SqlDateDeserializer(java.sql.Timestamp.class));    } catch (Throwable e) {      e.printStackTrace();    }    // hessian/3bb5    try {      Class stackTrace = Class.forName("java.lang.StackTraceElement");            _staticDeserializerMap.put(stackTrace, new StackTraceElementDeserializer());    } catch (Throwable e) {    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?