From 2d398ec2d9ab531f4e4fe96996166b2c5cc280f8 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 11 Jul 2012 15:58:18 +0800 Subject: [PATCH] support java.sql.Clob --- pom.xml | 4 +- .../fastjson/serializer/ClobSeriliazer.java | 39 +++++++++++++++++ .../fastjson/serializer/JSONSerializer.java | 3 ++ .../com/alibaba/json/bvt/TestDeprecate.java | 42 +++++++++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alibaba/fastjson/serializer/ClobSeriliazer.java create mode 100644 src/test/java/com/alibaba/json/bvt/TestDeprecate.java diff --git a/pom.xml b/pom.xml index 4b4956f41..bb9dfef2a 100644 --- a/pom.xml +++ b/pom.xml @@ -189,14 +189,14 @@ com.fasterxml.jackson.core jackson-databind - 2.0.1 + 2.0.4 test org.codehaus.jackson jackson-core-lgpl - 1.9.7 + 1.9.8 test diff --git a/src/main/java/com/alibaba/fastjson/serializer/ClobSeriliazer.java b/src/main/java/com/alibaba/fastjson/serializer/ClobSeriliazer.java new file mode 100644 index 000000000..3618cf040 --- /dev/null +++ b/src/main/java/com/alibaba/fastjson/serializer/ClobSeriliazer.java @@ -0,0 +1,39 @@ +package com.alibaba.fastjson.serializer; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringWriter; +import java.lang.reflect.Type; +import java.sql.Clob; +import java.sql.SQLException; + +public class ClobSeriliazer implements ObjectSerializer { + + public final static ClobSeriliazer instance = new ClobSeriliazer(); + + public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType) throws IOException { + try { + if (object == null) { + serializer.writeNull(); + return; + } + + Clob clob = (Clob) object; + Reader reader = clob.getCharacterStream(); + + StringWriter writer = new StringWriter(); + char[] buf = new char[1024]; + int len = 0; + while ((len = reader.read(buf)) != -1) { + writer.write(buf, 0, len); + } + reader.close(); + + String text = writer.toString(); + serializer.write(text); + } catch (SQLException e) { + throw new IOException("write clob error", e); + } + } + +} diff --git a/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java b/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java index 37a62ab13..ce1464509 100644 --- a/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java +++ b/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java @@ -20,6 +20,7 @@ import java.io.Writer; import java.lang.reflect.Proxy; import java.lang.reflect.Type; import java.nio.charset.Charset; +import java.sql.Clob; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -435,6 +436,8 @@ public class JSONSerializer { config.put(clazz, EnumerationSeriliazer.instance); } else if (Calendar.class.isAssignableFrom(clazz)) { config.put(clazz, CalendarSerializer.instance); + } else if (Clob.class.isAssignableFrom(clazz)) { + config.put(clazz, ClobSeriliazer.instance); } else { boolean isCglibProxy = false; for (Class item : clazz.getInterfaces()) { diff --git a/src/test/java/com/alibaba/json/bvt/TestDeprecate.java b/src/test/java/com/alibaba/json/bvt/TestDeprecate.java new file mode 100644 index 000000000..163c61f70 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/TestDeprecate.java @@ -0,0 +1,42 @@ +package com.alibaba.json.bvt; + +import junit.framework.TestCase; + +import com.alibaba.fastjson.JSON; + +public class TestDeprecate extends TestCase { + + public void test_0() throws Exception { + VO vo = new VO(); + vo.setId(123); + + String text = JSON.toJSONString(vo); + } + + public static class VO { + + private int id; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + /** + * @deprecated + * @return + */ + public int getId2() { + return this.id; + } + + @Deprecated + public int getId3() { + return this.id; + } + } + +}