Skip to content

Commit

Permalink
bug fixed & decrement jar size
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Apr 4, 2016
1 parent a9260a9 commit 025d031
Show file tree
Hide file tree
Showing 13 changed files with 157 additions and 198 deletions.
6 changes: 2 additions & 4 deletions src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
Expand Up @@ -104,15 +104,13 @@
import com.alibaba.fastjson.serializer.CurrencyCodec;
import com.alibaba.fastjson.serializer.DateCodec;
import com.alibaba.fastjson.serializer.FloatCodec;
import com.alibaba.fastjson.serializer.InetSocketAddressCodec;
import com.alibaba.fastjson.serializer.IntegerCodec;
import com.alibaba.fastjson.serializer.LongCodec;
import com.alibaba.fastjson.serializer.MapCodec;
import com.alibaba.fastjson.serializer.MiscCodec;
import com.alibaba.fastjson.serializer.ObjectArrayCodec;
import com.alibaba.fastjson.serializer.ReferenceCodec;
import com.alibaba.fastjson.serializer.StringCodec;
import com.alibaba.fastjson.serializer.TimeZoneCodec;
import com.alibaba.fastjson.util.ASMUtils;
import com.alibaba.fastjson.util.DeserializeBeanInfo;
import com.alibaba.fastjson.util.FieldInfo;
Expand Down Expand Up @@ -271,13 +269,13 @@ private ParserConfig(ASMDeserializerFactory asmFactory, ClassLoader parentClassL
derializers.put(SoftReference.class, ReferenceCodec.instance);

derializers.put(UUID.class, MiscCodec.instance);
derializers.put(TimeZone.class, TimeZoneCodec.instance);
derializers.put(TimeZone.class, MiscCodec.instance);
derializers.put(Locale.class, MiscCodec.instance);
derializers.put(Currency.class, CurrencyCodec.instance);
derializers.put(InetAddress.class, MiscCodec.instance);
derializers.put(Inet4Address.class, MiscCodec.instance);
derializers.put(Inet6Address.class, MiscCodec.instance);
derializers.put(InetSocketAddress.class, InetSocketAddressCodec.instance);
derializers.put(InetSocketAddress.class, MiscCodec.instance);
derializers.put(File.class, MiscCodec.instance);
derializers.put(URI.class, MiscCodec.instance);
derializers.put(URL.class, MiscCodec.instance);
Expand Down
Expand Up @@ -7,6 +7,7 @@
import com.alibaba.fastjson.parser.JSONLexer;
import com.alibaba.fastjson.parser.JSONScanner;
import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.util.IOUtils;

public class TimeDeserializer implements ObjectDeserializer {

Expand Down Expand Up @@ -60,6 +61,19 @@ public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName)
if (dateLexer.scanISO8601DateIfMatch()) {
longVal = dateLexer.getCalendar().getTimeInMillis();
} else {
boolean isDigit = true;
for (int i = 0; i< strVal.length(); ++i) {
char ch = strVal.charAt(i);
if (ch < '0' || ch > '9') {
isDigit = false;
break;
}
}
if (!isDigit) {
dateLexer.close();
return (T) java.sql.Time.valueOf(strVal);
}

longVal = Long.parseLong(strVal);
}
dateLexer.close();
Expand Down

This file was deleted.

This file was deleted.

76 changes: 74 additions & 2 deletions src/main/java/com/alibaba/fastjson/serializer/MiscCodec.java
Expand Up @@ -22,17 +22,20 @@
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.TimeZone;
import java.util.UUID;
import java.util.regex.Pattern;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONStreamAware;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONLexer;
import com.alibaba.fastjson.parser.JSONToken;
Expand Down Expand Up @@ -76,10 +79,32 @@ public void write(JSONSerializer serializer, Object object, Object fieldName, Ty
} else if (objClass == Class.class) {
Class<?> clazz = (Class<?>) object;
strVal = clazz.getName();
} else if (objClass == InetSocketAddress.class) {
InetSocketAddress address = (InetSocketAddress) object;

InetAddress inetAddress = address.getAddress();

out.write('{');
if (inetAddress != null) {
out.writeFieldName("address");
serializer.write(inetAddress);
out.write(',');
}
out.writeFieldName("port");
out.writeInt(address.getPort());
out.write('}');
return;
} else if (object instanceof File) {
strVal = ((File) object).getPath();
} else if (object instanceof InetAddress) {
strVal = ((InetAddress) object).getHostAddress();
} else if (object instanceof TimeZone) {
TimeZone timeZone = (TimeZone) object;
strVal = timeZone.getID();
} else if (object instanceof JSONStreamAware) {
JSONStreamAware aware = (JSONStreamAware) object;
aware.writeJSONString(out);
return;
} else {
strVal = object.toString();
}
Expand All @@ -89,9 +114,51 @@ public void write(JSONSerializer serializer, Object object, Object fieldName, Ty

@SuppressWarnings("unchecked")
public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) {

JSONLexer lexer = parser.lexer;

if (clazz == InetSocketAddress.class) {
if (lexer.token() == JSONToken.NULL) {
lexer.nextToken();
return null;
}

parser.accept(JSONToken.LBRACE);

InetAddress address = null;
int port = 0;
for (;;) {
String key = lexer.stringVal();
lexer.nextToken(JSONToken.COLON);


if (key.equals("address")) {
parser.accept(JSONToken.COLON);
address = parser.parseObject(InetAddress.class);
} else if (key.equals("port")) {
parser.accept(JSONToken.COLON);
if (lexer.token() != JSONToken.LITERAL_INT) {
throw new JSONException("port is not int");
}
port = lexer.intValue();
lexer.nextToken();
} else {
parser.accept(JSONToken.COLON);
parser.parse();
}

if (lexer.token() == JSONToken.COMMA) {
lexer.nextToken();
continue;
}

break;
}

parser.accept(JSONToken.RBRACE);

return (T) new InetSocketAddress(address, port);
}

Object objVal;

if (parser.resolveStatus == DefaultJSONParser.TypeNameRedirect) {
Expand Down Expand Up @@ -180,8 +247,13 @@ public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName)
return (T) new File(strVal);
}

if (clazz == TimeZone.class) {
return (T) TimeZone.getTimeZone(strVal);
}

if (clazz instanceof ParameterizedType) {
clazz = ((ParameterizedType) clazz).getRawType();
ParameterizedType parmeterizedType = (ParameterizedType) clazz;
clazz = parmeterizedType.getRawType();
}

if (clazz == Class.class) {
Expand Down
Expand Up @@ -198,12 +198,12 @@ public SerializeConfig(int tableSize) {
put(SimpleDateFormat.class, MiscCodec.instance);
put(Locale.class, MiscCodec.instance);
put(Currency.class, CurrencyCodec.instance);
put(TimeZone.class, TimeZoneCodec.instance);
put(TimeZone.class, MiscCodec.instance);
put(UUID.class, MiscCodec.instance);
put(InetAddress.class, MiscCodec.instance);
put(Inet4Address.class, MiscCodec.instance);
put(Inet6Address.class, MiscCodec.instance);
put(InetSocketAddress.class, InetSocketAddressCodec.instance);
put(InetSocketAddress.class, MiscCodec.instance);
put(File.class, MiscCodec.instance);
put(URI.class, MiscCodec.instance);
put(URL.class, MiscCodec.instance);
Expand Down Expand Up @@ -333,7 +333,7 @@ public ObjectSerializer getObjectWriter(Class<?> clazz) {
} else if (JSONSerializable.class.isAssignableFrom(clazz)) {
put(clazz, JSONSerializableSerializer.instance);
} else if (JSONStreamAware.class.isAssignableFrom(clazz)) {
put(clazz, JSONStreamAwareSerializer.instance);
put(clazz, MiscCodec.instance);
} else if (clazz.isEnum() || (clazz.getSuperclass() != null && clazz.getSuperclass().isEnum())) {
put(clazz, EnumSerializer.instance);
} else if (clazz.isArray()) {
Expand All @@ -343,7 +343,7 @@ public ObjectSerializer getObjectWriter(Class<?> clazz) {
} else if (Throwable.class.isAssignableFrom(clazz)) {
put(clazz, new ExceptionSerializer(clazz));
} else if (TimeZone.class.isAssignableFrom(clazz)) {
put(clazz, TimeZoneCodec.instance);
put(clazz, MiscCodec.instance);
} else if (Appendable.class.isAssignableFrom(clazz)) {
put(clazz, AppendableSerializer.instance);
} else if (Charset.class.isAssignableFrom(clazz)) {
Expand Down
41 changes: 0 additions & 41 deletions src/main/java/com/alibaba/fastjson/serializer/TimeZoneCodec.java

This file was deleted.

0 comments on commit 025d031

Please sign in to comment.