Flexjson security issue deserializing java.lang.Class, no constructor accessible

491 Views Asked by At

I can serialize objects of type GenericContainer, but when deserializing, I'm getting a security exception (see below). I suspect the issue is that java.lang.Class has no default (no arg) constructor, which Flexjson requries; is there a way around this?

public class GenericContainer {

       private Map<Class<?>, Object> container = new HashMap<Class<?>, Object>();

       public static void main(String[] args) {
          GenericContainer gc = new GenericContainer();
          gc.setTypedValue(String.class, "Java");
          gc.setTypedValue(Integer.class, 123);

          JSONSerializer ser = new JSONSerializer();     
          ser.prettyPrint(true);      
          String json = ser.deepSerialize(gc);      

          JSONDeserializer<GenericContainer> der = new JSONDeserializer<GenericContainer>();  
          GenericContainer gc2 = der.deserialize(json);  //exception here
       }

       public <T> void setTypedValue(Class<T> klass, T thing) {
          container.put(klass, thing);
       }

       public <T> T getTypedValue(Class<T> klass) {
          return klass.cast(container.get(klass));
       }

       public Map<Class<?>, Object> getContainer() {
          return container;
       }

       public void setContainer(Map<Class<?>, Object> container) {
          this.container = container;
       }

Exception...

Exception in thread "main" java.lang.SecurityException: Can not make a java.lang.Class constructor accessible
    at java.lang.reflect.AccessibleObject.setAccessible0(AccessibleObject.java:139)
    at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:129)
    at flexjson.factories.BeanObjectFactory.instantiate(BeanObjectFactory.java:31)
    at flexjson.factories.BeanObjectFactory.instantiate(BeanObjectFactory.java:16)
    at flexjson.ObjectBinder.bind(ObjectBinder.java:95)
    at flexjson.ObjectBinder.bindIntoMap(ObjectBinder.java:123)
    at flexjson.factories.MapObjectFactory.instantiate(MapObjectFactory.java:18)
    at flexjson.ObjectBinder.bind(ObjectBinder.java:95)
    at flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149)
    at flexjson.factories.BeanObjectFactory.instantiate(BeanObjectFactory.java:17)
    at flexjson.ObjectBinder.bind(ObjectBinder.java:95)
    at flexjson.ObjectBinder.bind(ObjectBinder.java:74)
    at flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:158)
    at com.raffian.ztask.test.GenericContainer.main(GenericContainer.java:28)
0

There are 0 best solutions below