content: package com.alibaba.json.bvt;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.Serializable;
  import java.lang.reflect.Method;
  import java.util.HashMap;
  
  import junit.framework.Assert;
  import junit.framework.TestCase;
  
  import org.apache.commons.io.IOUtils;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONObject;
  import com.alibaba.fastjson.serializer.SerializerFeature;
  
  public class TestExternal5 extends TestCase {
  
      public void test_0() throws Exception {
          ExtClassLoader classLoader = new ExtClassLoader();
          Class<?> clazz = classLoader.loadClass("com.alibaba.dubbo.demo.MyEsbResultModel2");
          Method method = clazz.getMethod("setReturnValue", new Class[] { Serializable.class });
  
          Object obj = clazz.newInstance();
          method.invoke(obj, "AAAA");
  
          {
              String text = JSON.toJSONString(obj);
              System.out.println(text);
          }
  
          String text = JSON.toJSONString(obj, SerializerFeature.WriteClassName, SerializerFeature.WriteMapNullValue);
          System.out.println(text);
          JSON.parseObject(text, clazz);
          JSONObject jsonObj = JSON.parseObject(text);
          Assert.assertEquals(jsonObj.getString("@type"), "com.alibaba.dubbo.demo.MyEsbResultModel2");
      }
  
      public static class ExtClassLoader extends ClassLoader {
  
          public ExtClassLoader() throws IOException{
              super(Thread.currentThread().getContextClassLoader());
  
              {
                  byte[] bytes;
                  InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("external/MyEsbResultModel2.clazz");
                  bytes = IOUtils.toByteArray(is);
                  is.close();
                  
                  super.defineClass("com.alibaba.dubbo.demo.MyEsbResultModel2", bytes, 0, bytes.length);
              }
          }
      }
  }
  