Author: aparfonov
Date: 2011-08-02 04:38:59 -0400 (Tue, 02 Aug 2011)
New Revision: 4690
Added:
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/ClassTransfBean.java
Modified:
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorImpl.java
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonUtils.java
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilder.java
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorTest.java
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilderTest.java
Log:
EXOJCR-1459 : Add java.lang.Class to set of 'known types' for java to JSON
transformation
Modified:
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorImpl.java
===================================================================
---
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorImpl.java 2011-08-01
13:48:28 UTC (rev 4689)
+++
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorImpl.java 2011-08-02
08:38:59 UTC (rev 4690)
@@ -210,7 +210,7 @@
* @return JsonValue.
* @throws JsonException if any errors occurs.
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "rawtypes"})
private JsonValue createJsonValue(Object object) throws JsonException
{
Types type = JsonUtils.getType(object);
@@ -238,6 +238,8 @@
return new StringValue((String)object);
case ENUM :
return new StringValue(((Enum)object).name());
+ case CLASS :
+ return new StringValue(((Class)object).getName());
case ARRAY_BOOLEAN : {
JsonValue jsonArray = new ArrayValue();
int length = Array.getLength(object);
@@ -385,7 +387,7 @@
private static Set<String> getTransientFields(final Class<?> clazz)
{
Set<String> set = new HashSet<String>();
-
+
Field[] fields = SecurityHelper.doPrivilegedAction(new
PrivilegedAction<Field[]>()
{
public Field[] run()
Modified:
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonUtils.java
===================================================================
---
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonUtils.java 2011-08-01
13:48:28 UTC (rev 4689)
+++
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/JsonUtils.java 2011-08-02
08:38:59 UTC (rev 4690)
@@ -106,7 +106,10 @@
MAP,
/** Enum. */
- ENUM
+ ENUM,
+
+ /** java.lang.Class */
+ CLASS
}
/**
@@ -145,6 +148,8 @@
KNOWN_TYPES.put(Character.class.getName(), Types.CHAR);
KNOWN_TYPES.put(String.class.getName(), Types.STRING);
+
+ KNOWN_TYPES.put(Class.class.getName(), Types.CLASS);
// primitive types
KNOWN_TYPES.put("boolean", Types.BOOLEAN);
@@ -172,7 +177,6 @@
KNOWN_TYPES.put(new char[0].getClass().getName(), Types.ARRAY_CHAR);
KNOWN_TYPES.put(new String[0].getClass().getName(), Types.ARRAY_STRING);
-
}
/**
@@ -280,7 +284,6 @@
* @return {@link Types} or <code>null</code> (see above)
* @see {@link KNOWN_TYPES}.
*/
- @SuppressWarnings("unchecked")
public static Types getType(Object o)
{
if (o == null)
Modified:
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilder.java
===================================================================
---
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilder.java 2011-08-01
13:48:28 UTC (rev 4689)
+++
ws/trunk/exo.ws.frameworks.json/src/main/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilder.java 2011-08-02
08:38:59 UTC (rev 4690)
@@ -339,7 +339,7 @@
* @return Object.
* @throws JsonException if any errors occurs.
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"unchecked", "rawtypes"})
public static <T> T createObject(Class<T> clazz, JsonValue jsonValue)
throws JsonException
{
if (jsonValue == null || jsonValue.isNull())
@@ -485,6 +485,15 @@
return jsonValue.getStringValue().charAt(0);
case STRING :
return jsonValue.getStringValue();
+ case CLASS :
+ try
+ {
+ return Class.forName(jsonValue.getStringValue());
+ }
+ catch (ClassNotFoundException e)
+ {
+ return null;
+ }
case ARRAY_BOOLEAN : {
boolean[] params = new boolean[jsonValue.size()];
Iterator<JsonValue> values = jsonValue.getElements();
Added:
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/ClassTransfBean.java
===================================================================
---
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/ClassTransfBean.java
(rev 0)
+++
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/ClassTransfBean.java 2011-08-02
08:38:59 UTC (rev 4690)
@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.exoplatform.ws.frameworks.json;
+
+@SuppressWarnings("rawtypes")
+public class ClassTransfBean
+{
+ private Class klass;
+
+ public Class getKlass()
+ {
+ return klass;
+ }
+
+ public void setKlass(Class klass)
+ {
+ this.klass = klass;
+ }
+}
Property changes on:
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/ClassTransfBean.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorTest.java
===================================================================
---
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorTest.java 2011-08-01
13:48:28 UTC (rev 4689)
+++
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/JsonGeneratorTest.java 2011-08-02
08:38:59 UTC (rev 4690)
@@ -25,6 +25,7 @@
import org.exoplatform.ws.frameworks.json.BookEnum;
import org.exoplatform.ws.frameworks.json.BookStorage;
import org.exoplatform.ws.frameworks.json.BookWrapper;
+import org.exoplatform.ws.frameworks.json.ClassTransfBean;
import org.exoplatform.ws.frameworks.json.JavaMapBean;
import org.exoplatform.ws.frameworks.json.StringEnum;
import org.exoplatform.ws.frameworks.json.value.JsonValue;
@@ -242,4 +243,16 @@
assertEquals(BookEnum.JUNIT_IN_ACTION.name(),
jsonValue.getElement("book").getStringValue());
}
+ public void testBeanClassTransf() throws Exception
+ {
+ ClassTransfBean be = new ClassTransfBean();
+ be.setKlass(ForTestClass000.class);
+ JsonValue jsonValue = new JsonGeneratorImpl().createJsonObject(be);
+ //System.out.println(jsonValue);
+ assertEquals(ForTestClass000.class.getName(),
jsonValue.getElement("klass").getStringValue());
+ }
+
+ public static class ForTestClass000
+ {
+ }
}
Modified:
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilderTest.java
===================================================================
---
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilderTest.java 2011-08-01
13:48:28 UTC (rev 4689)
+++
ws/trunk/exo.ws.frameworks.json/src/test/java/org/exoplatform/ws/frameworks/json/impl/ObjectBuilderTest.java 2011-08-02
08:38:59 UTC (rev 4690)
@@ -23,6 +23,7 @@
import org.exoplatform.ws.frameworks.json.Book;
import org.exoplatform.ws.frameworks.json.BookEnum;
import org.exoplatform.ws.frameworks.json.BookStorage;
+import org.exoplatform.ws.frameworks.json.ClassTransfBean;
import org.exoplatform.ws.frameworks.json.JavaCollectionBean;
import org.exoplatform.ws.frameworks.json.JavaMapBean;
import org.exoplatform.ws.frameworks.json.JsonParser;
@@ -360,4 +361,20 @@
BeanWithBookEnum o = ObjectBuilder.createObject(BeanWithBookEnum.class,
jsonValue);
assertEquals(BookEnum.BEGINNING_C, o.getBook());
}
+
+ public void testClass() throws Exception
+ {
+ String source = "{\"klass\":\"" +
ForTestClass001.class.getName() + "\"}";
+ JsonParser jsonParser = new JsonParserImpl();
+ JsonDefaultHandler handler = new JsonDefaultHandler();
+ jsonParser.parse(new ByteArrayInputStream(source.getBytes()), handler);
+ JsonValue jsonValue = handler.getJsonObject();
+ //System.out.println(jsonValue);
+ ClassTransfBean o = ObjectBuilder.createObject(ClassTransfBean.class, jsonValue);
+ assertEquals(ForTestClass001.class, o.getKlass());
+ }
+
+ public static class ForTestClass001
+ {
+ }
}